From 68fee5e118522f6f25e59216167be083d22d7466 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Mon, 8 Jan 2024 11:33:47 +0530 Subject: [PATCH 01/13] feat(intercom): upgrade intercom version from 1.4 to 2.10 --- src/cdk/v2/destinations/intercom/config.js | 55 + .../destinations/intercom/procWorkflow.yaml | 170 ++ .../v2/destinations/intercom/rtWorkflow.yaml | 31 + src/cdk/v2/destinations/intercom/utils.js | 254 ++ .../v2/destinations/intercom/utils.test.js | 588 ++++ src/constants/destinationCanonicalNames.js | 1 + src/v0/destinations/intercom/config.js | 53 - .../intercom/data/INTERCOMGroupConfig.json | 53 - .../intercom/data/INTERCOMIdentifyConfig.json | 46 - .../intercom/data/INTERCOMTrackConfig.json | 36 - src/v0/destinations/intercom/deleteUsers.js | 2 +- src/v0/destinations/intercom/transform.js | 252 -- src/v0/destinations/intercom/util.js | 32 - src/v0/destinations/intercom/util.test.js | 176 -- .../intercom/dataDelivery/data.ts | 161 +- .../destinations/intercom/deleteUsers/data.ts | 6 +- .../destinations/intercom/network.ts | 295 +- .../destinations/intercom/processor/data.ts | 2387 +++++------------ .../destinations/intercom/router/data.ts | 447 +-- 19 files changed, 2381 insertions(+), 2664 deletions(-) create mode 100644 src/cdk/v2/destinations/intercom/config.js create mode 100644 src/cdk/v2/destinations/intercom/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/intercom/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/intercom/utils.js create mode 100644 src/cdk/v2/destinations/intercom/utils.test.js delete mode 100644 src/v0/destinations/intercom/config.js delete mode 100644 src/v0/destinations/intercom/data/INTERCOMGroupConfig.json delete mode 100644 src/v0/destinations/intercom/data/INTERCOMIdentifyConfig.json delete mode 100644 src/v0/destinations/intercom/data/INTERCOMTrackConfig.json delete mode 100644 src/v0/destinations/intercom/transform.js delete mode 100644 src/v0/destinations/intercom/util.js delete mode 100644 src/v0/destinations/intercom/util.test.js diff --git a/src/cdk/v2/destinations/intercom/config.js b/src/cdk/v2/destinations/intercom/config.js new file mode 100644 index 0000000000..96b7abd280 --- /dev/null +++ b/src/cdk/v2/destinations/intercom/config.js @@ -0,0 +1,55 @@ +const BASE_ENDPOINT = 'https://api.intercom.io'; +const BASE_EU_ENDPOINT = 'https://api.eu.intercom.io'; +const BASE_AU_ENDPOINT = 'https://api.au.intercom.io'; + +const SEARCH_CONTACT_ENDPOINT = 'contacts/search'; +const CREATE_OR_UPDATE_COMPANY_ENDPOINT = 'companies'; + +const ReservedUserAttributes = [ + 'userId', + 'role', + 'email', + 'phone', + 'name', + 'avatar', + 'company', + 'ownerId', + 'lastName', + 'lastname', + 'firstName', + 'firstname', + 'createdAt', + 'timestamp', + 'originalTimestamp', + 'unsubscribedFromEmails', +]; + +const ReservedCompanyAttributes = [ + 'tags', + 'size', + 'plan', + 'name', + 'email', + 'userId', + 'website', + 'industry', + 'segments', + 'userCount', + 'createdAt', + 'sessionCount', + 'monthlySpend', + 'remoteCreatedAt', +]; + +const MetadataTypes = { richLink: ['url', 'value'], monetaryAmount: ['amount', 'currency'] }; + +module.exports = { + BASE_ENDPOINT, + MetadataTypes, + BASE_EU_ENDPOINT, + BASE_AU_ENDPOINT, + ReservedUserAttributes, + SEARCH_CONTACT_ENDPOINT, + ReservedCompanyAttributes, + CREATE_OR_UPDATE_COMPANY_ENDPOINT, +}; diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml new file mode 100644 index 0000000000..0452faf431 --- /dev/null +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -0,0 +1,170 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ./utils + exportAll: true + - path: ../../bindings/jsontemplate + exportAll: true + - name: defaultRequestConfig + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: getFieldValueFromMessage + path: ../../../../v0/util + - name: isDefinedAndNotNull + path: ../../../../v0/util + - name: addExternalIdToTraits + path: ../../../../v0/util + +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, .TRACK, .GROUP])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.apiKey, "Access Token is not present. Aborting"); + + - name: rEtlPayload + condition: .message.context.mappedToDestination === true + template: | + $.addExternalIdToTraits(.message); + const payload = $.getFieldValueFromMessage(.message, "traits"); + payload; + + - name: searchContact + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}} + template: | + const contactId = await $.searchContact(.message, .destination); + contactId; + + - name: identifyEtlPayload + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && !.message.context.mappedToDestination + template: | + const payload = .message.({ + external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, + email: {{{{$.getGenericPaths("email")}}}}, + phone: {{{{$.getGenericPaths("phone")}}}}, + avatar: {{{{$.getGenericPaths("avatar")}}}}, + last_seen_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), + role: .traits.role || .context.traits.role, + signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), + owner_id: .traits.ownerId || .context.traits.ownerId ? Number(.traits.ownerId || .context.traits.ownerId) : undefined, + unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails + }) + payload.name = $.getName(.message); + payload.custom_attributes = .message.context.traits || {}; + payload.custom_attributes = $.filterCustomAttributes(payload, "user"); + payload.external_id = !(payload.external_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; + payload; + + - name: prepareIdentifyPayload + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} + template: | + const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; + $.context.payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.identifyEtlPayload; + $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; + $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: validateIdentifyPayload + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} + template: | + $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); + + - name: trackEtlPayload + condition: $.outputs.messageType === {{$.EventType.TRACK}} && !.message.context.mappedToDestination + template: | + let payload = .message.({ + event_name: .event, + created_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), + user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, + email: {{{{$.getGenericPaths("email")}}}}, + id: .properties.id || .traits.id, + metadata: .properties + }) + payload = $.addMetadataToPayload(payload); + payload.user_id = !(payload.user_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.user_id; + payload; + + - name: prepareTrackPayload + condition: $.outputs.messageType === {{$.EventType.TRACK}} + template: | + $.context.payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.trackEtlPayload; + $.context.requestMethod = 'POST'; + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "events"; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: validateTrackPayload + condition: $.outputs.messageType === {{$.EventType.TRACK}} + template: | + $.assert($.context.payload.event_name, "Event name is required for track call"); + $.assert($.context.payload.user_id || $.context.payload.email, "Either email or userId is required for Track call"); + + - name: groupEtlPayload + condition: $.outputs.messageType === {{$.EventType.GROUP}} && !.message.context.mappedToDestination + template: | + const payload = .message.({ + company_id: {{{{$.getGenericPaths("groupId")}}}}, + name: {{{{$.getGenericPaths("name")}}}}, + website: {{{{$.getGenericPaths("website")}}}}, + plan: .traits.plan || .context.traits.plan, + size: Number(.traits.size || .context.traits.size), + industry: .traits.industry || .context.traits.industry, + monthly_spend: .traits.monthlySpend || .context.traits.monthlySpend ? Number(.traits.monthlySpend || .context.traits.monthlySpend) : undefined, + remote_created_at: .traits.remoteCreatedAt || .context.traits.remoteCreatedAt ? Number(.traits.remoteCreatedAt || .context.traits.remoteCreatedAt) : undefined + }) + payload.custom_attributes = .message.traits || {}; + payload.custom_attributes = $.filterCustomAttributes(payload, "company"); + payload; + + - name: prepareAddUserToCompanyPayload + condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.isDefinedAndNotNull($.outputs.searchContact) + template: | + $.assert(.message.groupId, "groupId is required for group call"); + let payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.groupEtlPayload; + const contactId = $.outputs.searchContact; + const companyId = await $.createOrUpdateCompany(payload, .destination); + $.assert(companyId, "Unable to create or update company"); + payload.requestBodyJson = { + id: companyId + } + payload.endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts" + "/" + contactId + "/" + "companies"; + payload; + + - name: prepareCreateOrUpdateCompanyPayload + condition: $.outputs.messageType === {{$.EventType.GROUP}} && !$.isDefinedAndNotNull($.outputs.searchContact) + template: | + $.assert(.message.groupId, "groupId is required for group call"); + let payload = { + requestBodyJson: .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.groupEtlPayload + } + payload.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; + payload; + + - name: prepareGroupPayload + condition: $.outputs.messageType === {{$.EventType.GROUP}} + template: | + $.context.payload = $.isDefinedAndNotNull($.outputs.searchContact) ? $.outputs.prepareAddUserToCompanyPayload.requestBodyJson : $.outputs.prepareCreateOrUpdateCompanyPayload.requestBodyJson; + $.context.requestMethod = 'POST'; + $.context.endpoint = $.isDefinedAndNotNull($.outputs.searchContact) ? $.outputs.prepareAddUserToCompanyPayload.endpoint : $.outputs.prepareCreateOrUpdateCompanyPayload.endpoint; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: buildResponseForProcessTransformation + description: build response + template: | + const response = $.defaultRequestConfig(); + response.body.JSON = $.removeUndefinedAndNullValues($.context.payload); + response.endpoint = $.context.endpoint; + response.method = $.context.requestMethod; + response.headers = $.getHeaders(.destination); + response; \ No newline at end of file diff --git a/src/cdk/v2/destinations/intercom/rtWorkflow.yaml b/src/cdk/v2/destinations/intercom/rtWorkflow.yaml new file mode 100644 index 0000000000..a907403ca4 --- /dev/null +++ b/src/cdk/v2/destinations/intercom/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.({ + "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/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js new file mode 100644 index 0000000000..a578f8ba41 --- /dev/null +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -0,0 +1,254 @@ +const { NetworkError } = require('@rudderstack/integrations-lib'); +const tags = require('../../../../v0/util/tags'); +const { httpPOST } = require('../../../../adapters/network'); +const { + processAxiosResponse, + getDynamicErrorType, +} = require('../../../../adapters/utils/networkUtils'); +const { + flattenJson, + getIntegrationsObj, + isDefinedAndNotNull, + isHttpStatusSuccess, + getFieldValueFromMessage, + removeUndefinedAndNullValues, +} = require('../../../../v0/util'); +const { JSON_MIME_TYPE } = require('../../../../v0/util/constant'); +const { + BASE_ENDPOINT, + MetadataTypes, + BASE_EU_ENDPOINT, + BASE_AU_ENDPOINT, + ReservedUserAttributes, + SEARCH_CONTACT_ENDPOINT, + ReservedCompanyAttributes, + CREATE_OR_UPDATE_COMPANY_ENDPOINT, +} = require('./config'); + +/** + * Returns destination request headers + * @param {*} destination + * @returns + */ +const getHeaders = (destination) => ({ + 'Content-Type': JSON_MIME_TYPE, + Authorization: `Bearer ${destination.Config.apiKey}`, + Accept: JSON_MIME_TYPE, + 'Intercom-Version': '2.10', +}); + +/** + * Returns destination request base endpoint + * @param {*} destination + * @returns + */ +const getBaseEndpoint = (destination) => { + const { apiServer } = destination.Config; + + switch (apiServer) { + case 'eu': + return BASE_EU_ENDPOINT; + case 'au': + return BASE_AU_ENDPOINT; + default: + return BASE_ENDPOINT; + } +}; + +/** + * Returns contact lookup field + * @param {*} message + * @returns + */ +const getLookUpField = (message) => { + let lookupField = 'email'; + const integrationsObj = getIntegrationsObj(message, 'INTERCOM'); + if (integrationsObj && isDefinedAndNotNull(integrationsObj.lookup)) { + lookupField = integrationsObj.lookup; + } + return lookupField; +}; + +/** + * Returns the value of name field + * @param {*} message + * @returns + */ +const getName = (message) => { + const name = message?.traits?.name || message?.context?.traits?.name; + if (name) return name; + const firstName = getFieldValueFromMessage(message, 'firstName'); + const lastName = getFieldValueFromMessage(message, 'lastName'); + if (firstName && lastName) { + return `${firstName} ${lastName}`; + } + + if (firstName || lastName) { + return firstName || lastName; + } + return undefined; +}; + +/** + * Returns custom attributes for identify and group calls (for contact and company in intercom) + * @param {*} payload + * @param {*} type + * @returns + */ +const filterCustomAttributes = (payload, type) => { + const ReservedAttributes = type === 'user' ? ReservedUserAttributes : ReservedCompanyAttributes; + let { custom_attributes: customAttributes } = payload; + if (customAttributes) { + ReservedAttributes.forEach((trait) => { + if (customAttributes[trait]) delete customAttributes[trait]; + }); + + if (isDefinedAndNotNull(customAttributes) && Object.keys(customAttributes).length > 0) { + customAttributes = flattenJson(customAttributes); + } + } + return customAttributes; +}; + +/** + * Api call to search contact in intercom to returns id of contact + * Ref doc : https://developers.intercom.com/docs/references/rest-api/api.intercom.io/Contacts/SearchContacts/ + * @param {*} message + * @param {*} destination + * @returns + */ +const searchContact = async (message, destination) => { + const lookupField = getLookUpField(message); + const lookupFieldValue = getFieldValueFromMessage(message, lookupField); + const data = JSON.stringify({ + query: { + operator: 'AND', + value: [ + { + field: lookupField, + operator: '=', + value: lookupFieldValue, + }, + ], + }, + }); + + const headers = getHeaders(destination); + const baseEndPoint = getBaseEndpoint(destination); + const endpoint = `${baseEndPoint}/${SEARCH_CONTACT_ENDPOINT}`; + const response = await httpPOST(endpoint, data, { + headers, + destType: 'intercom', + feature: 'transformation', + }); + const processedUserResponse = processAxiosResponse(response); + if (isHttpStatusSuccess(processedUserResponse.status)) { + return processedUserResponse.response?.data.length > 0 + ? processedUserResponse.response?.data[0]?.id + : null; + } + + throw new NetworkError( + `Unable to search contact due to : ${JSON.stringify(processedUserResponse?.response?.errors)}`, + processedUserResponse?.status, + { + [tags]: getDynamicErrorType(processedUserResponse?.status), + }, + processedUserResponse, + ); +}; + +/** + * Api call to create or update companies in intercom + * Ref doc : https://developers.intercom.com/docs/references/rest-api/api.intercom.io/Companies/createOrUpdateCompany/ + * @param {*} payload + * @param {*} destination + * @returns + */ +const createOrUpdateCompany = async (payload, destination) => { + const headers = getHeaders(destination); + const finalPayload = JSON.stringify(removeUndefinedAndNullValues(payload)); + const baseEndPoint = getBaseEndpoint(destination); + const endpoint = `${baseEndPoint}/${CREATE_OR_UPDATE_COMPANY_ENDPOINT}`; + const response = await httpPOST(endpoint, finalPayload, { + headers, + destType: 'intercom', + feature: 'transformation', + }); + + const processedResponse = processAxiosResponse(response); + if (isHttpStatusSuccess(processedResponse.status)) { + return processedResponse.response?.id; + } + + throw new NetworkError( + `Unable to Create or Update Company due to : ${JSON.stringify( + processedResponse?.response?.errors, + )}`, + processedResponse?.status, + { + [tags]: getDynamicErrorType(processedResponse?.status), + }, + processedResponse, + ); +}; + +/** + * Returns metadata object + * @param {*} metadata + * @returns + */ +const separateReservedAndRestMetadata = (metadata) => { + const reservedMetadata = {}; + const restMetadata = {}; + if (metadata) { + Object.entries(metadata).forEach(([key, value]) => { + if (value && typeof value === 'object') { + const hasMonetaryAmountKeys = MetadataTypes.monetaryAmount.every((type) => type in value); + const hasRichLinkKeys = MetadataTypes.richLink.every((type) => type in value); + if (hasMonetaryAmountKeys || hasRichLinkKeys) { + reservedMetadata[key] = value; + } else { + restMetadata[key] = value; + } + } else { + restMetadata[key] = value; + } + }); + } + + // Return the separated metadata objects + return { reservedMetadata, restMetadata }; +}; + +/** + * Returns final payload with metadata + * @param {*} payload + * @returns + */ +const addMetadataToPayload = (payload) => { + let finalPayload = payload; + if (finalPayload.metadata) { + // reserved metadata contains JSON objects that does not requires flattening + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata( + finalPayload.metadata, + ); + finalPayload = { + ...finalPayload, + metadata: { ...reservedMetadata, ...flattenJson(restMetadata) }, + }; + } + return finalPayload; +}; + +module.exports = { + getName, + getHeaders, + searchContact, + getLookUpField, + getBaseEndpoint, + addMetadataToPayload, + createOrUpdateCompany, + filterCustomAttributes, + separateReservedAndRestMetadata, +}; diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js new file mode 100644 index 0000000000..f9a03fd386 --- /dev/null +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -0,0 +1,588 @@ +const axios = require('axios'); +const { + getName, + getHeaders, + searchContact, + getLookUpField, + getBaseEndpoint, + addMetadataToPayload, + createOrUpdateCompany, + filterCustomAttributes, + separateReservedAndRestMetadata, +} = require('./utils'); +const { BASE_ENDPOINT, BASE_EU_ENDPOINT, BASE_AU_ENDPOINT } = require('./config'); + +jest.mock('axios', () => ({ + ...jest.requireActual('axios'), + post: jest.fn(), +})); + +describe('separateReservedAndRestMetadata utility test', () => { + it('separate reserved and rest metadata', () => { + const metadata = { + property1: 1, + property2: 'test', + property3: true, + property4: { + property1: 1, + property2: 'test', + property3: { + subProp1: { + a: 'a', + b: 'b', + }, + subProp2: ['a', 'b'], + }, + }, + property5: {}, + property6: [], + property7: null, + property8: undefined, + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + }; + const expectedReservedMetadata = { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + }; + const expectedRestMetadata = { + property1: 1, + property2: 'test', + property3: true, + property4: { + property1: 1, + property2: 'test', + property3: { + subProp1: { + a: 'a', + b: 'b', + }, + subProp2: ['a', 'b'], + }, + }, + property5: {}, + property6: [], + property7: null, + property8: undefined, + }; + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); + + expect(expectedReservedMetadata).toEqual(reservedMetadata); + expect(expectedRestMetadata).toEqual(restMetadata); + }); + + it('reserved metadata types not present in input metadata', () => { + const metadata = { + property1: 1, + property2: 'test', + property3: true, + property4: { + property1: 1, + property2: 'test', + property3: { + subProp1: { + a: 'a', + b: 'b', + }, + subProp2: ['a', 'b'], + }, + }, + property5: {}, + property6: [], + property7: null, + property8: undefined, + }; + const expectedRestMetadata = { + property1: 1, + property2: 'test', + property3: true, + property4: { + property1: 1, + property2: 'test', + property3: { + subProp1: { + a: 'a', + b: 'b', + }, + subProp2: ['a', 'b'], + }, + }, + property5: {}, + property6: [], + property7: null, + property8: undefined, + }; + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); + + expect({}).toEqual(reservedMetadata); + expect(expectedRestMetadata).toEqual(restMetadata); + }); + + it('metadata input contains only reserved metadata types', () => { + const metadata = { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + }; + const expectedReservedMetadata = { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + }; + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); + + expect(expectedReservedMetadata).toEqual(reservedMetadata); + expect({}).toEqual(restMetadata); + }); + + it('empty metadata object', () => { + const metadata = {}; + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); + expect({}).toEqual(reservedMetadata); + expect({}).toEqual(restMetadata); + }); + + it('null/undefined metadata', () => { + const metadata = null; + const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); + expect({}).toEqual(reservedMetadata); + expect({}).toEqual(restMetadata); + }); +}); + +describe('getBaseEndpoint utility test', () => { + it('Should return BASE_ENDPOINT when destination.Config.apiServer is not "eu" or "au"', () => { + const destination = { + Config: { + apiServer: 'us', + }, + }; + const result = getBaseEndpoint(destination); + expect(result).toBe(BASE_ENDPOINT); + }); + + it('Should return BASE_EU_ENDPOINT when destination.Config.apiServer is "eu"', () => { + const destination = { + Config: { + apiServer: 'eu', + }, + }; + const result = getBaseEndpoint(destination); + expect(result).toBe(BASE_EU_ENDPOINT); + }); + + it('Should return BASE_AU_ENDPOINT when destination.Config.apiServer is "au"', () => { + const destination = { + Config: { + apiServer: 'au', + }, + }; + const result = getBaseEndpoint(destination); + expect(result).toBe(BASE_AU_ENDPOINT); + }); + + it('Should return BASE_ENDPOINT when destination.Config.apiServer is null', () => { + const destination = { + Config: { + apiServer: null, + }, + }; + const result = getBaseEndpoint(destination); + expect(result).toBe(BASE_ENDPOINT); + }); +}); + +describe('getHeaders utility test', () => { + it('Should return an object with the correct headers', () => { + const destination = { + Config: { + apiKey: 'testApiKey', + }, + }; + + const expectedHeaders = { + 'Content-Type': 'application/json', + Authorization: `Bearer ${destination.Config.apiKey}`, + Accept: 'application/json', + 'Intercom-Version': '2.10', + }; + const headers = getHeaders(destination); + expect(headers).toEqual(expectedHeaders); + }); +}); + +describe('getLookUpField utility test', () => { + it('Should return email as default lookup field when no integration object is found', () => { + const message = {}; + const result = getLookUpField(message); + expect(result).toBe('email'); + }); +}); + +describe('getName utility test', () => { + it('Should return the concatenation of firstName and lastName fields when both exist', () => { + const message = { + context: { + traits: { + firstName: 'John', + lastName: 'Doe', + }, + }, + }; + expect(getName(message)).toBe('John Doe'); + }); + + it('Should return the firstName field when only firstName exists', () => { + const message = { + context: { + traits: { + firstName: 'John', + }, + }, + }; + expect(getName(message)).toBe('John'); + }); + + it('Should return the lastName field when only lastName exists', () => { + const message = { + context: { + traits: { + lastName: 'Doe', + }, + }, + }; + expect(getName(message)).toBe('Doe'); + }); + + it('Should return undefined when both message.traits and message.context.traits are undefined', () => { + const message = {}; + expect(getName(message)).toBeUndefined(); + }); +}); + +describe('filterCustomAttributes utility test', () => { + it('Should return an empty object when all custom attributes are reserved attributes', () => { + const payload = { custom_attributes: { email: 'test@rudder.com', name: 'rudder test' } }; + const result = filterCustomAttributes(payload, 'user'); + expect(result).toEqual({}); + }); + + it('Should return a flattened object when custom attributes are not null, not reserved attributes and nested', () => { + const payload = { + custom_attributes: { source: 'rudder-js-sdk', data: { nestedAttribute: 'nestedValue' } }, + }; + const result = filterCustomAttributes(payload, 'user'); + expect(result).toEqual({ source: 'rudder-js-sdk', 'data.nestedAttribute': 'nestedValue' }); + }); + + it('Should return null when custom_attributes is null', () => { + const payload = { custom_attributes: null }; + const result = filterCustomAttributes(payload, 'company'); + expect(result).toBeNull(); + }); +}); + +describe('addMetadataToPayload utility test', () => { + it('Should return the same payload if metadata is present but empty', () => { + const payload = { data: 'test', metadata: {} }; + const result = addMetadataToPayload(payload); + expect(result).toEqual(payload); + }); + + it('should add flattened metadata to payload if metadata is present and not empty', () => { + const payload = { + data: 'test', + metadata: { + amount: 30, + currency: 'USD', + url: 'https//test.com', + restData: { source: 'rudderStack' }, + }, + }; + const result = addMetadataToPayload(payload); + expect(result).toEqual({ + data: 'test', + metadata: { + amount: 30, + currency: 'USD', + url: 'https//test.com', + 'restData.source': 'rudderStack', + }, + }); + }); +}); + +describe('searchContact utility test', () => { + it('Should successfully search contact by email', async () => { + const message = { context: { traits: { email: 'test@rudderlabs.com' } } }; + const destination = { Config: { apiKey: 'testApiKey', apiServer: 'us' } }; + axios.post.mockResolvedValue({ + status: 200, + data: { + type: 'list', + total_count: 1, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 1, + }, + data: [ + { + type: 'contact', + id: '1', + email: 'test@rudderlabs.com', + }, + ], + }, + }); + + const result = await searchContact(message, destination); + expect(result).toEqual('1'); + }); + + it('Should return first contact id if multiple contact exist with give search field', async () => { + const message = { + context: { + traits: { email: 'test@rudderlabs.com', phone: '+91 9999999999' }, + integrations: { INTERCOM: { lookup: 'phone' } }, + }, + }; + const destination = { Config: { apiKey: 'testApiKey', apiServer: 'us' } }; + axios.post.mockResolvedValue({ + status: 200, + data: { + type: 'list', + total_count: 1, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 1, + }, + data: [ + { + type: 'contact', + id: '1', + email: 'test@rudderlabs.com', + phone: '+91 9999999999', + }, + { + type: 'contact', + id: '2', + email: 'test+1@rudderlabs.com', + phone: '+91 9999999999', + }, + ], + }, + }); + + const result = await searchContact(message, destination); + expect(result).toEqual('1'); + }); + + it('Should return null if no contact is found', async () => { + const message = { + context: { + traits: { email: 'test+10@rudderlabs.com', phone: '+91 9999999999' }, + integrations: { INTERCOM: { lookup: 'email' } }, + }, + }; + const destination = { Config: { apiKey: 'testApiKey', apiServer: 'us' } }; + axios.post.mockResolvedValue({ + status: 200, + data: { + type: 'list', + total_count: 0, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 0, + }, + data: [], + }, + }); + + const result = await searchContact(message, destination); + expect(result).toBeNull(); + }); + + it('Should throw an error in case if axios calls returns an error', async () => { + const message = { + context: { + traits: { email: 'test+3@rudderlabs.com', phone: '+91 9999999999' }, + integrations: { INTERCOM: { lookup: 'email' } }, + }, + }; + const destination = { Config: { apiKey: 'invalidTestApiKey', apiServer: 'us' } }; + axios.post.mockRejectedValue({ + status: 401, + data: { + type: 'error.list', + request_id: 'request_400', + errors: [ + { + code: 'unauthorized', + message: 'Access Token Invalid', + }, + ], + }, + }); + + try { + const result = await searchContact(message, destination); + expect(result).toEqual(''); + } catch (error) { + expect(error.message).toEqual( + 'Unable to search contact due to : [{"code":"unauthorized","message":"Access Token Invalid"}]', + ); + } + }); +}); + +describe('createOrUpdateCompany utility test', () => { + it('Should successfully create company', async () => { + const payload = { + company_id: 'rudderlabs', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + custom_attributes: {}, + }; + const destination = { Config: { apiKey: 'testApiKey', apiServer: 'us' } }; + axios.post.mockResolvedValue({ + status: 200, + data: { + type: 'company', + company_id: 'rudderlabs', + id: '1', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + remote_created_at: 1374138000, + created_at: 1701930212, + updated_at: 1701930212, + }, + }); + + const result = await createOrUpdateCompany(payload, destination); + expect(result).toEqual('1'); + }); + + it('Should throw an error in case if axios calls returns an error', async () => { + const payload = { + company_id: 'rudderlabs', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + testData: true, + }; + const destination = { Config: { apiKey: 'testApiKey', apiServer: 'us' } }; + axios.post.mockRejectedValue({ + status: 400, + data: { + type: 'error.list', + request_id: 'request_400', + errors: [ + { + code: 'bad_request', + message: "bad 'testData' parameter", + }, + ], + }, + }); + + try { + const result = await createOrUpdateCompany(payload, destination); + expect(result).toEqual(''); + } catch (error) { + expect(error.message).toEqual( + 'Unable to Create or Update Company due to : [{"code":"bad_request","message":"bad \'testData\' parameter"}]', + ); + } + }); + + it('Should throw an error in case if axios calls returns an error', async () => { + const payload = { + company_id: 'rudderlabs', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + testData: true, + }; + const destination = { Config: { apiKey: 'invalidTestApiKey', apiServer: 'us' } }; + axios.post.mockRejectedValue({ + status: 400, + data: { + type: 'error.list', + request_id: 'request_400', + errors: [ + { + code: 'unauthorized', + message: 'Access Token Invalid', + }, + ], + }, + }); + + try { + const result = await createOrUpdateCompany(payload, destination); + expect(result).toEqual(''); + } catch (error) { + expect(error.message).toEqual( + 'Unable to Create or Update Company due to : [{"code":"unauthorized","message":"Access Token Invalid"}]', + ); + } + }); +}); diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index d1e199c9e2..f019cc9fec 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -141,6 +141,7 @@ const DestCanonicalNames = { 'TWITTER_ADS', ], BRAZE: ['BRAZE', 'Braze', 'braze'], + INTERCOM: ['INTERCOM', 'intercom', 'Intercom'], }; module.exports = { DestHandlerMap, DestCanonicalNames }; diff --git a/src/v0/destinations/intercom/config.js b/src/v0/destinations/intercom/config.js deleted file mode 100644 index ae29eebc1e..0000000000 --- a/src/v0/destinations/intercom/config.js +++ /dev/null @@ -1,53 +0,0 @@ -const { getMappingConfig } = require('../../util'); - -const BASE_ENDPOINT = 'https://api.intercom.io'; - -// track events | Track -const TRACK_ENDPOINT = `${BASE_ENDPOINT}/events`; -// Create, Update a user with a company | Identify -const IDENTIFY_ENDPOINT = `${BASE_ENDPOINT}/users`; -// create, update, delete a company | Group -const GROUP_ENDPOINT = `${BASE_ENDPOINT}/companies`; - -const ConfigCategory = { - TRACK: { - endpoint: TRACK_ENDPOINT, - name: 'INTERCOMTrackConfig', - }, - IDENTIFY: { - endpoint: IDENTIFY_ENDPOINT, - name: 'INTERCOMIdentifyConfig', - }, - GROUP: { - endpoint: GROUP_ENDPOINT, - name: 'INTERCOMGroupConfig', - }, -}; - -const MappingConfig = getMappingConfig(ConfigCategory, __dirname); - -const ReservedTraitsProperties = [ - 'userId', - 'email', - 'phone', - 'name', - 'createdAt', - 'firstName', - 'lastName', - 'firstname', - 'lastname', - 'company', -]; - -const ReservedCompanyProperties = ['id', 'name', 'industry']; - -// ref:- https://developers.intercom.com/intercom-api-reference/v1.4/reference/event-metadata-types -const MetadataTypes = { richLink: ['url', 'value'], monetaryAmount: ['amount', 'currency'] }; - -module.exports = { - ConfigCategory, - MappingConfig, - ReservedCompanyProperties, - ReservedTraitsProperties, - MetadataTypes, -}; diff --git a/src/v0/destinations/intercom/data/INTERCOMGroupConfig.json b/src/v0/destinations/intercom/data/INTERCOMGroupConfig.json deleted file mode 100644 index 174f828a56..0000000000 --- a/src/v0/destinations/intercom/data/INTERCOMGroupConfig.json +++ /dev/null @@ -1,53 +0,0 @@ -[ - { - "destKey": "company_id", - "sourceKeys": "groupId", - "required": true - }, - { - "destKey": "name", - "sourceKeys": "name", - "sourceFromGenericMap": true, - "required": false - }, - { - "destKey": "plan", - "sourceKeys": ["traits.plan","context.traits.plan"], - "required": false - }, - { - "destKey": "size", - "sourceKeys": ["traits.size","context.traits.size"], - "metadata": { - "type": "toNumber" - }, - "required": false - }, - { - "destKey": "website", - "sourceKeys": "website", - "sourceFromGenericMap": true, - "required": false - }, - { - "destKey": "industry", - "sourceKeys": ["traits.industry","context.traits.industry"], - "required": false - }, - { - "destKey": "monthly_spend", - "sourceKeys": ["traits.monthlySpend","context.traits.monthlySpend"], - "metadata": { - "type": "toNumber" - }, - "required": false - }, - { - "destKey": "remote_created_at", - "sourceKeys": ["traits.remoteCreatedAt","context.traits.remoteCreatedAt"], - "metadata": { - "type": "toNumber" - }, - "required": false - } -] diff --git a/src/v0/destinations/intercom/data/INTERCOMIdentifyConfig.json b/src/v0/destinations/intercom/data/INTERCOMIdentifyConfig.json deleted file mode 100644 index 726a741161..0000000000 --- a/src/v0/destinations/intercom/data/INTERCOMIdentifyConfig.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "destKey": "user_id", - "sourceKeys": [ - "userId", - "traits.userId", - "traits.id", - "context.traits.userId", - "context.traits.id" - ], - "required": false - }, - { - "destKey": "email", - "sourceKeys": ["traits.email", "context.traits.email"], - "required": false - }, - { - "destKey": "phone", - "sourceKeys": ["traits.phone", "context.traits.phone"], - "required": false - }, - { - "destKey": "name", - "sourceKeys": ["traits.name", "context.traits.name"], - "required": false - }, - { - "destKey": "signed_up_at", - "sourceKeys": ["traits.createdAt", "context.traits.createdAt"], - "required": false, - "metadata": { - "type": "secondTimestamp" - } - }, - { - "destKey": "last_seen_user_agent", - "sourceKeys": "context.userAgent", - "required": false - }, - { - "destKey": "custom_attributes", - "sourceKeys": ["traits", "context.traits"], - "required": false - } -] diff --git a/src/v0/destinations/intercom/data/INTERCOMTrackConfig.json b/src/v0/destinations/intercom/data/INTERCOMTrackConfig.json deleted file mode 100644 index f33c9a8a98..0000000000 --- a/src/v0/destinations/intercom/data/INTERCOMTrackConfig.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "destKey": "user_id", - "sourceKeys": [ - "userId", - "traits.userId", - "traits.id", - "context.traits.userId", - "context.traits.id" - ], - "required": false - }, - { - "destKey": "email", - "sourceKeys": ["traits.email", "context.traits.email"], - "required": false - }, - { - "destKey": "event_name", - "sourceKeys": "event", - "required": true - }, - { - "destKey": "created", - "sourceKeys": "timestamp", - "sourceFromGenericMap": true, - "required": true, - "metadata": { - "type": "secondTimestamp" - } - }, - { - "destKey": "metadata", - "sourceKeys": "properties" - } -] diff --git a/src/v0/destinations/intercom/deleteUsers.js b/src/v0/destinations/intercom/deleteUsers.js index 085e842458..b91f520ade 100644 --- a/src/v0/destinations/intercom/deleteUsers.js +++ b/src/v0/destinations/intercom/deleteUsers.js @@ -14,7 +14,7 @@ const userDeletionHandler = async (userAttributes, config) => { } const { apiKey } = config; if (!apiKey) { - throw new ConfigurationError('api key for deletion not present'); + throw new ConfigurationError('The access token is not available'); } const validUserIds = []; userAttributes.forEach((userAttribute) => { diff --git a/src/v0/destinations/intercom/transform.js b/src/v0/destinations/intercom/transform.js deleted file mode 100644 index 212eaba13b..0000000000 --- a/src/v0/destinations/intercom/transform.js +++ /dev/null @@ -1,252 +0,0 @@ -const md5 = require('md5'); -const get = require('get-value'); -const { InstrumentationError } = require('@rudderstack/integrations-lib'); -const { EventType, MappedToDestinationKey } = require('../../../constants'); -const { - ConfigCategory, - MappingConfig, - ReservedTraitsProperties, - ReservedCompanyProperties, -} = require('./config'); -const { - constructPayload, - removeUndefinedAndNullValues, - defaultRequestConfig, - defaultPostRequestConfig, - getFieldValueFromMessage, - addExternalIdToTraits, - simpleProcessRouterDest, - flattenJson, -} = require('../../util'); -const { separateReservedAndRestMetadata } = require('./util'); -const { JSON_MIME_TYPE } = require('../../util/constant'); - -function getCompanyAttribute(company) { - const companiesList = []; - if (company.name || company.id) { - const customAttributes = {}; - Object.keys(company).forEach((key) => { - // the key is not in ReservedCompanyProperties - if (!ReservedCompanyProperties.includes(key)) { - const val = company[key]; - if (val !== Object(val)) { - customAttributes[key] = val; - } else { - customAttributes[key] = JSON.stringify(val); - } - } - }); - - companiesList.push({ - company_id: company.id || md5(company.name), - custom_attributes: removeUndefinedAndNullValues(customAttributes), - name: company.name, - industry: company.industry, - }); - } - return companiesList; -} - -function validateIdentify(message, payload, config) { - const finalPayload = payload; - - finalPayload.update_last_request_at = - config.updateLastRequestAt !== undefined ? config.updateLastRequestAt : true; - if (payload.user_id || payload.email) { - if (payload.name === undefined || payload.name === '') { - const firstName = getFieldValueFromMessage(message, 'firstName'); - const lastName = getFieldValueFromMessage(message, 'lastName'); - if (firstName && lastName) { - finalPayload.name = `${firstName} ${lastName}`; - } else { - finalPayload.name = firstName || lastName; - } - } - - if (get(finalPayload, 'custom_attributes.company')) { - finalPayload.companies = getCompanyAttribute(finalPayload.custom_attributes.company); - } - - if (finalPayload.custom_attributes) { - ReservedTraitsProperties.forEach((trait) => { - delete finalPayload.custom_attributes[trait]; - }); - finalPayload.custom_attributes = flattenJson(finalPayload.custom_attributes); - } - - return finalPayload; - } - 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('Either of `email` or `userId` is required for Track call'); - } - // pass only string, number, boolean properties - if (payload.metadata) { - // reserved metadata contains JSON objects that does not requires flattening - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(payload.metadata); - return { ...payload, metadata: { ...reservedMetadata, ...flattenJson(restMetadata) } }; - } - - return payload; -} - -const checkIfEmailOrUserIdPresent = (message, Config) => { - const { context, anonymousId } = message; - let { userId } = message; - if (Config.sendAnonymousId && !userId) { - userId = anonymousId; - } - return !!(userId || context.traits?.email); -}; - -function attachUserAndCompany(message, Config) { - const email = message.context?.traits?.email; - const { userId, anonymousId, traits, groupId } = message; - const requestBody = {}; - if (userId) { - requestBody.user_id = userId; - } - if (Config.sendAnonymousId && !userId) { - requestBody.user_id = anonymousId; - } - if (email) { - requestBody.email = email; - } - const companyObj = { - company_id: groupId, - }; - if (traits?.name) { - companyObj.name = traits.name; - } - requestBody.companies = [companyObj]; - const response = defaultRequestConfig(); - response.method = defaultPostRequestConfig.requestMethod; - response.endpoint = ConfigCategory.IDENTIFY.endpoint; - response.headers = { - 'Content-Type': JSON_MIME_TYPE, - Authorization: `Bearer ${Config.apiKey}`, - Accept: JSON_MIME_TYPE, - 'Intercom-Version': '1.4', - }; - response.body.JSON = requestBody; - return response; -} - -function buildCustomAttributes(message, payload) { - const finalPayload = payload; - const { traits } = message; - const customAttributes = {}; - const companyReservedKeys = [ - 'remoteCreatedAt', - 'monthlySpend', - 'industry', - 'website', - 'size', - 'plan', - 'name', - ]; - - if (traits) { - Object.keys(traits).forEach((key) => { - if (!companyReservedKeys.includes(key) && key !== 'userId') { - customAttributes[key] = traits[key]; - } - }); - } - - if (Object.keys(customAttributes).length > 0) { - finalPayload.custom_attributes = flattenJson(customAttributes); - } - - return finalPayload; -} - -function validateAndBuildResponse(message, payload, category, destination) { - const respList = []; - const response = defaultRequestConfig(); - response.method = defaultPostRequestConfig.requestMethod; - response.endpoint = category.endpoint; - response.headers = { - 'Content-Type': JSON_MIME_TYPE, - Authorization: `Bearer ${destination.Config.apiKey}`, - Accept: JSON_MIME_TYPE, - 'Intercom-Version': '1.4', - }; - response.userId = message.anonymousId; - const messageType = message.type.toLowerCase(); - switch (messageType) { - case EventType.IDENTIFY: - response.body.JSON = removeUndefinedAndNullValues( - validateIdentify(message, payload, destination.Config), - ); - break; - case EventType.TRACK: - response.body.JSON = removeUndefinedAndNullValues(validateTrack(payload)); - break; - case EventType.GROUP: { - response.body.JSON = removeUndefinedAndNullValues(buildCustomAttributes(message, payload)); - respList.push(response); - if (checkIfEmailOrUserIdPresent(message, destination.Config)) { - const attachUserAndCompanyResponse = attachUserAndCompany(message, destination.Config); - attachUserAndCompanyResponse.userId = message.anonymousId; - respList.push(attachUserAndCompanyResponse); - } - break; - } - default: - throw new InstrumentationError(`Message type ${messageType} not supported`); - } - - return messageType === EventType.GROUP ? respList : response; -} - -function processSingleMessage(message, destination) { - if (!message.type) { - throw new InstrumentationError('Message Type is not present. Aborting message.'); - } - const { sendAnonymousId } = destination.Config; - const messageType = message.type.toLowerCase(); - let category; - - switch (messageType) { - case EventType.IDENTIFY: - category = ConfigCategory.IDENTIFY; - break; - case EventType.TRACK: - category = ConfigCategory.TRACK; - break; - case EventType.GROUP: - category = ConfigCategory.GROUP; - break; - default: - throw new InstrumentationError(`Message type ${messageType} not supported`); - } - - // build the response and return - let payload; - if (get(message, MappedToDestinationKey)) { - addExternalIdToTraits(message); - payload = getFieldValueFromMessage(message, 'traits'); - } else { - payload = constructPayload(message, MappingConfig[category.name]); - } - if (category !== ConfigCategory.GROUP && sendAnonymousId && !payload.user_id) { - payload.user_id = message.anonymousId; - } - return validateAndBuildResponse(message, payload, category, destination); -} - -function process(event) { - const response = processSingleMessage(event.message, event.destination); - return response; -} - -const processRouterDest = async (inputs, reqMetadata) => { - const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); - return respList; -}; - -module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/intercom/util.js b/src/v0/destinations/intercom/util.js deleted file mode 100644 index 24a2934f7e..0000000000 --- a/src/v0/destinations/intercom/util.js +++ /dev/null @@ -1,32 +0,0 @@ -const { MetadataTypes } = require('./config'); - -/** - * Separates reserved metadata from rest of the metadata based on the metadata types - * ref:- https://developers.intercom.com/intercom-api-reference/v1.4/reference/event-metadata-types - * @param {*} metadata - * @returns - */ -function separateReservedAndRestMetadata(metadata) { - const reservedMetadata = {}; - const restMetadata = {}; - if (metadata) { - Object.entries(metadata).forEach(([key, value]) => { - if (value && typeof value === 'object') { - const hasMonetaryAmountKeys = MetadataTypes.monetaryAmount.every((type) => type in value); - const hasRichLinkKeys = MetadataTypes.richLink.every((type) => type in value); - if (hasMonetaryAmountKeys || hasRichLinkKeys) { - reservedMetadata[key] = value; - } else { - restMetadata[key] = value; - } - } else { - restMetadata[key] = value; - } - }); - } - - // Return the separated metadata objects - return { reservedMetadata, restMetadata }; -} - -module.exports = { separateReservedAndRestMetadata }; diff --git a/src/v0/destinations/intercom/util.test.js b/src/v0/destinations/intercom/util.test.js deleted file mode 100644 index 99dbdd1f7e..0000000000 --- a/src/v0/destinations/intercom/util.test.js +++ /dev/null @@ -1,176 +0,0 @@ -const { separateReservedAndRestMetadata } = require('./util'); - -describe('separateReservedAndRestMetadata utility test', () => { - it('separate reserved and rest metadata', () => { - const metadata = { - property1: 1, - property2: 'test', - property3: true, - property4: { - property1: 1, - property2: 'test', - property3: { - subProp1: { - a: 'a', - b: 'b', - }, - subProp2: ['a', 'b'], - }, - }, - property5: {}, - property6: [], - property7: null, - property8: undefined, - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', - }, - }; - const expectedReservedMetadata = { - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', - }, - }; - const expectedRestMetadata = { - property1: 1, - property2: 'test', - property3: true, - property4: { - property1: 1, - property2: 'test', - property3: { - subProp1: { - a: 'a', - b: 'b', - }, - subProp2: ['a', 'b'], - }, - }, - property5: {}, - property6: [], - property7: null, - property8: undefined, - }; - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); - - expect(expectedReservedMetadata).toEqual(reservedMetadata); - expect(expectedRestMetadata).toEqual(restMetadata); - }); - - it('reserved metadata types not present in input metadata', () => { - const metadata = { - property1: 1, - property2: 'test', - property3: true, - property4: { - property1: 1, - property2: 'test', - property3: { - subProp1: { - a: 'a', - b: 'b', - }, - subProp2: ['a', 'b'], - }, - }, - property5: {}, - property6: [], - property7: null, - property8: undefined, - }; - const expectedRestMetadata = { - property1: 1, - property2: 'test', - property3: true, - property4: { - property1: 1, - property2: 'test', - property3: { - subProp1: { - a: 'a', - b: 'b', - }, - subProp2: ['a', 'b'], - }, - }, - property5: {}, - property6: [], - property7: null, - property8: undefined, - }; - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); - - expect({}).toEqual(reservedMetadata); - expect(expectedRestMetadata).toEqual(restMetadata); - }); - - it('metadata input contains only reserved metadata types', () => { - const metadata = { - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', - }, - }; - const expectedReservedMetadata = { - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', - }, - }; - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); - - expect(expectedReservedMetadata).toEqual(reservedMetadata); - expect({}).toEqual(restMetadata); - }); - - it('empty metadata object', () => { - const metadata = {}; - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); - expect({}).toEqual(reservedMetadata); - expect({}).toEqual(restMetadata); - }); - - it('null/undefined metadata', () => { - const metadata = null; - const { reservedMetadata, restMetadata } = separateReservedAndRestMetadata(metadata); - expect({}).toEqual(reservedMetadata); - expect({}).toEqual(restMetadata); - }); -}); diff --git a/test/integrations/destinations/intercom/dataDelivery/data.ts b/test/integrations/destinations/intercom/dataDelivery/data.ts index 23bcdc6af2..db7aafc963 100644 --- a/test/integrations/destinations/intercom/dataDelivery/data.ts +++ b/test/integrations/destinations/intercom/dataDelivery/data.ts @@ -1,90 +1,91 @@ export const data = [ { - "name": "intercom", - "description": "Test 0", - "feature": "dataDelivery", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.intercom.io/users/test1", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer intercomApiKey", - "Accept": "application/json", - "Intercom-Version": "1.4" + name: 'intercom', + description: 'Test 0', + feature: 'dataDelivery', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users/test1', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', }, - "params": {}, - "body": { - "JSON": { - "email": "test_1@test.com", - "phone": "9876543210", - "name": "Test Name", - "signed_up_at": 1601493060, - "last_seen_user_agent": "unknown", - "update_last_request_at": true, - "user_id": "test_user_id_1", - "custom_attributes": { - "anonymousId": "58b21c2d-f8d5-4410-a2d0-b268a26b7e33", - "key1": "value1", - "address.city": "Kolkata", - "address.state": "West Bengal", - "originalArray[0].nested_field": "nested value", - "originalArray[0].tags[0]": "tag_1", - "originalArray[0].tags[1]": "tag_2", - "originalArray[0].tags[2]": "tag_3", - "originalArray[1].nested_field": "nested value", - "originalArray[1].tags[0]": "tag_1", - "originalArray[2].nested_field": "nested value" - } + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + name: 'Test Name', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + update_last_request_at: true, + user_id: 'test_user_id_1', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + 'address.city': 'Kolkata', + 'address.state': 'West Bengal', + 'originalArray[0].nested_field': 'nested value', + 'originalArray[0].tags[0]': 'tag_1', + 'originalArray[0].tags[1]': 'tag_2', + 'originalArray[0].tags[2]': 'tag_3', + 'originalArray[1].nested_field': 'nested value', + 'originalArray[1].tags[0]': 'tag_1', + 'originalArray[2].nested_field': 'nested value', + }, }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} + XML: {}, + JSON_ARRAY: {}, + FORM: {}, }, - "files": {}, - "userId": "58b21c2d-f8d5-4410-a2d0-b268a26b7e33" + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', }, - "method": "POST" - } + method: 'POST', + }, }, - "output": { - "response": { - "status": 500, - "body": { - "output": { - "status": 500, - "message": "[Intercom Response Handler] Request failed for destination intercom with status: 408", - "destinationResponse": { - "response": { - "type": "error.list", - "request_id": "000on04msi4jpk7d3u60", - "errors": [ + output: { + response: { + status: 500, + body: { + output: { + status: 500, + message: + '[Intercom Response Handler] Request failed for destination intercom with status: 408', + destinationResponse: { + response: { + type: 'error.list', + request_id: '000on04msi4jpk7d3u60', + errors: [ { - "code": "Request Timeout", - "message": "The server would not wait any longer for the client" - } - ] + code: 'Request Timeout', + message: 'The server would not wait any longer for the client', + }, + ], }, - "status": 408 + status: 408, + }, + statTags: { + destType: 'INTERCOM', + errorCategory: 'network', + destinationId: 'Non-determininable', + workspaceId: 'Non-determininable', + errorType: 'retryable', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', }, - "statTags": { - "destType": "INTERCOM", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "retryable", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - } - } - } - } -] \ No newline at end of file + }, + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/intercom/deleteUsers/data.ts b/test/integrations/destinations/intercom/deleteUsers/data.ts index a45af0a98f..58285ee683 100644 --- a/test/integrations/destinations/intercom/deleteUsers/data.ts +++ b/test/integrations/destinations/intercom/deleteUsers/data.ts @@ -19,7 +19,7 @@ export const data = [ }, ], config: { - apiKey: 'API_KEY', + apiKey: 'testApiKey', }, }, ], @@ -57,7 +57,7 @@ export const data = [ }, ], config: { - apiKey: 'API_KEY', + apiKey: 'testApiKey', }, }, ], @@ -140,7 +140,7 @@ export const data = [ body: [ { statusCode: 400, - error: 'api key for deletion not present', + error: 'The access token is not available', }, ], }, diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index e3bba3f260..339ef2746c 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -8,7 +8,7 @@ const deleteNwData = [ }, headers: { Accept: 'application/json', - Authorization: 'Bearer API_KEY', + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', }, }, @@ -35,7 +35,7 @@ const deleteNwData = [ }, headers: { Accept: 'application/json', - Authorization: 'Bearer API_KEY', + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', }, }, @@ -56,7 +56,7 @@ const deleteNwData = [ }, headers: { Accept: 'application/json', - Authorization: 'Bearer API_KEY', + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', }, }, @@ -77,7 +77,7 @@ const deleteNwData = [ }, headers: { Accept: 'application/json', - Authorization: 'Bearer API_KEY', + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', }, }, @@ -89,6 +89,292 @@ const deleteNwData = [ }, }, }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'email', operator: '=', value: 'test@rudderlabs.com' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + statusText: 'ok', + data: { + type: 'list', + total_count: 0, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 0, + }, + data: [], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'email', operator: '=', value: 'test+2@rudderlabs.com' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + statusText: 'ok', + data: { + type: 'list', + total_count: 1, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 1, + }, + data: [ + { + type: 'contact', + id: '7070129940741e45d040', + workspace_id: 'rudderWorkspace', + external_id: 'user@2', + role: 'user', + email: 'test+2@rudderlabs.com', + }, + ], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'email', operator: '=', value: 'test+5@rudderlabs.com' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + statusText: 'ok', + data: { + type: 'list', + total_count: 1, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 1, + }, + data: [ + { + type: 'contact', + id: '70701240741e45d040', + workspace_id: 'rudderWorkspace', + external_id: 'user@5', + role: 'user', + email: 'test+5@rudderlabs.com', + }, + ], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'phone', operator: '=', value: '+91 9299999999' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + statusText: 'ok', + data: { + type: 'list', + total_count: 1, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 1, + }, + data: [ + { + type: 'contact', + id: '7070129940741e45d040', + workspace_id: 'rudderWorkspace', + external_id: 'user@2', + role: 'user', + email: 'test+2@rudderlabs.com', + }, + ], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'email', operator: '=', value: 'test+4@rudderlabs.com' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + statusText: 'ok', + data: { + type: 'list', + total_count: 0, + pages: { + type: 'pages', + page: 1, + per_page: 50, + total_pages: 0, + }, + data: [], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/contacts/search', + data: { + query: { + operator: 'AND', + value: [{ field: 'email', operator: '=', value: 'test+3@rudderlabs.com' }], + }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer invalidApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 401, + data: { + type: 'error.list', + request_id: 'request_1', + errors: [ + { + code: 'unauthorized', + message: 'Access Token Invalid', + }, + ], + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/companies', + data: { + company_id: 'rudderlabs', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + custom_attributes: {}, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 200, + data: { + type: 'company', + company_id: 'rudderlabs', + id: '657264e9018c0a647s45', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + remote_created_at: 1374138000, + created_at: 1701930212, + updated_at: 1701930212, + }, + }, + }, + { + httpReq: { + method: 'post', + url: 'https://api.intercom.io/companies', + data: { + company_id: 'rudderlabs', + name: 'RudderStack', + website: 'www.rudderstack.com', + plan: 'enterprise', + size: 500, + industry: 'CDP', + custom_attributes: { isOpenSource: true }, + }, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + }, + }, + httpRes: { + status: 401, + data: { + type: 'error.list', + request_id: 'request_1', + errors: [ + { + code: 'parameter_invalid', + message: "Custom attribute 'isOpenSource' does not exist", + }, + ], + }, + }, + }, ]; const deliveryCallsData = [ { @@ -142,4 +428,3 @@ const deliveryCallsData = [ }, ]; export const networkCallsData = [...deleteNwData, ...deliveryCallsData]; - diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 14d1884ba2..e8dedcf6ec 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -1,7 +1,7 @@ export const data = [ { name: 'intercom', - description: 'Test 0', + description: 'No message type', feature: 'processor', module: 'destination', version: 'v0', @@ -10,94 +10,40 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - userId: 'test_user_id_1', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - address: { - city: 'Kolkata', - state: 'West Bengal', - }, - originalArray: [ - { - nested_field: 'nested value', - tags: ['tag_1', 'tag_2', 'tag_3'], - }, - { - nested_field: 'nested value', - tags: ['tag_1'], - }, - { - nested_field: 'nested value', - }, - ], - }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', + 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: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 1, + }, }, ], + method: 'POST', }, }, output: { @@ -105,49 +51,92 @@ export const data = [ status: 200, body: [ { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - user_id: 'test_user_id_1', - email: 'test_1@test.com', - phone: '9876543210', - name: 'Test Name', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - 'address.city': 'Kolkata', - 'address.state': 'West Bengal', - 'originalArray[0].nested_field': 'nested value', - 'originalArray[0].tags[0]': 'tag_1', - 'originalArray[0].tags[1]': 'tag_2', - 'originalArray[0].tags[2]': 'tag_3', - 'originalArray[1].nested_field': 'nested value', - 'originalArray[1].tags[0]': 'tag_1', - 'originalArray[2].nested_field': 'nested value', - }, - update_last_request_at: true, + metadata: { + jobId: 1, + }, + statusCode: 400, + error: + 'message Type is not present. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message Type is not present. Aborting', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Unsupported message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + 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: 'page', + originalTimestamp: '2020-09-22T14:42:44.724Z', + timestamp: '2022-09-22T20:12:44.757+05:30', + userId: 'user@1', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + }, + metadata: { + jobId: 2, + }, + }, + ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + jobId: 2, + }, + statusCode: 400, + error: + 'message type page is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type page is not supported', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', }, - statusCode: 200, }, ], }, @@ -155,7 +144,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 1', + description: 'Missing required config', feature: 'processor', module: 'destination', version: 'v0', @@ -164,75 +153,36 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@1', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + age: 23, + email: 'adc@test.com', firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', }, - userAgent: 'unknown', }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 3, + }, }, ], + method: 'POST', }, }, output: { @@ -240,39 +190,20 @@ export const data = [ status: 200, body: [ { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - update_last_request_at: true, - name: 'Test Name', - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + metadata: { + jobId: 3, + }, + statusCode: 400, + error: + 'Access Token is not present. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Access Token is not present. Aborting', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', }, - statusCode: 200, }, ], }, @@ -280,7 +211,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 2', + description: 'Create customer with email as lookup field', feature: 'processor', module: 'destination', version: 'v0', @@ -289,74 +220,41 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@1', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', + age: 23, + email: 'test@rudderlabs.com', + phone: '+91 9999999999', + firstName: 'Test', + lastName: 'Rudderlabs', + address: 'california usa', + ownerId: '13', }, - userAgent: 'unknown', }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 4, + }, }, ], + method: 'POST', }, }, output: { @@ -365,37 +263,38 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', + email: 'test@rudderlabs.com', + external_id: 'user@1', + last_seen_at: 1700628164, + name: 'Test Rudderlabs', + owner_id: 13, + phone: '+91 9999999999', custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', + address: 'california usa', + age: 23, }, - update_last_request_at: true, - name: 'Name', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, + }, + endpoint: 'https://api.intercom.io/contacts', + headers: { + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Intercom-Version': '2.10', }, + userId: '', + version: '1', + type: 'REST', + method: 'POST', files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + params: {}, }, + metadata: { jobId: 4 }, statusCode: 200, }, ], @@ -404,7 +303,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 3', + description: 'Update customer with email as lookup field', feature: 'processor', module: 'destination', version: 'v0', @@ -413,74 +312,40 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@2', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - firstName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', + age: 32, + email: 'test+2@rudderlabs.com', + phone: '+91 9299999999', + firstName: 'Test', + lastName: 'RudderStack', + ownerId: '14', }, - userAgent: 'unknown', }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 5, + }, }, ], + method: 'POST', }, }, output: { @@ -489,37 +354,37 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', + email: 'test+2@rudderlabs.com', + external_id: 'user@2', + last_seen_at: 1700628164, + name: 'Test RudderStack', + owner_id: 14, + phone: '+91 9299999999', custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', + age: 32, }, - update_last_request_at: true, - name: 'Name', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, + }, + endpoint: 'https://api.intercom.io/contacts/7070129940741e45d040', + headers: { + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Intercom-Version': '2.10', }, + userId: '', + version: '1', + type: 'REST', + method: 'PUT', files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + params: {}, }, + metadata: { jobId: 5 }, statusCode: 200, }, ], @@ -528,7 +393,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 4: ERROR - Either of `email` or `userId` is required for Identify call', + description: 'Missing required parameters for an identify call', feature: 'processor', module: 'destination', version: 'v0', @@ -537,73 +402,46 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + anonymousId: 'anon@2', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - firstName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', + age: 32, + phone: '+91 9299999999', + firstName: 'Test', + lastName: 'RudderStack', + ownerId: '14', + role: 'user', + source: 'rudder-sdk', }, - userAgent: 'unknown', }, - event: 'Test Event 2', integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', + INTERCOM: { + lookup: 'phone', + }, + }, type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 6, + }, }, ], + method: 'POST', }, }, output: { @@ -611,14 +449,18 @@ export const data = [ status: 200, body: [ { + metadata: { + jobId: 6, + }, statusCode: 400, - error: 'Either of `email` or `userId` is required for Identify call', + error: + 'Either email or userId is required for Identify call: Workflow: procWorkflow, Step: validateIdentifyPayload, ChildStep: undefined, OriginalError: Either email or userId is required for Identify call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', destType: 'INTERCOM', module: 'destination', - implementation: 'native', + implementation: 'cdkV2', feature: 'processor', }, }, @@ -628,7 +470,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 5', + description: 'Unauthorized error while searching contact for an identify call', feature: 'processor', module: 'destination', version: 'v0', @@ -637,84 +479,46 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@3', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - company: { - name: 'Test Comp', - id: 'company_id', - industry: 'test industry', - key1: 'value1', - key2: { - a: 'a', - }, - key3: [1, 2, 3], - }, + phone: '+91 9399999999', + email: 'test+3@rudderlabs.com', + firstName: 'Test', + lastName: 'Rudder', + ownerId: '15', + role: 'admin', + source: 'rudder-android-sdk', }, - userAgent: 'unknown', }, - event: 'Test Event 2', integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', + INTERCOM: { + lookup: 'email', + }, + }, type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'invalidApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 7, + }, }, ], + method: 'POST', }, }, output: { @@ -722,51 +526,20 @@ export const data = [ status: 200, body: [ { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - update_last_request_at: true, - name: 'Name', - companies: [ - { - company_id: 'company_id', - custom_attributes: { - key1: 'value1', - key2: '{"a":"a"}', - key3: '[1,2,3]', - }, - name: 'Test Comp', - industry: 'test industry', - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + metadata: { + jobId: 7, + }, + statusCode: 401, + error: + '{"message":"{\\"message\\":\\"Unable to search contact due to : [{\\\\\\"code\\\\\\":\\\\\\"unauthorized\\\\\\",\\\\\\"message\\\\\\":\\\\\\"Access Token Invalid\\\\\\"}]: Workflow: procWorkflow, Step: searchContact, ChildStep: undefined, OriginalError: Unable to search contact due to : [{\\\\\\"code\\\\\\":\\\\\\"unauthorized\\\\\\",\\\\\\"message\\\\\\":\\\\\\"Access Token Invalid\\\\\\"}]\\",\\"destinationResponse\\":{\\"response\\":{\\"type\\":\\"error.list\\",\\"request_id\\":\\"request_1\\",\\"errors\\":[{\\"code\\":\\"unauthorized\\",\\"message\\":\\"Access Token Invalid\\"}]},\\"status\\":401}}","destinationResponse":{"response":{"type":"error.list","request_id":"request_1","errors":[{"code":"unauthorized","message":"Access Token Invalid"}]},"status":401}}', + statTags: { + errorCategory: 'network', + errorType: 'aborted', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', }, - statusCode: 200, }, ], }, @@ -774,7 +547,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 6', + description: 'Track call without event name', feature: 'processor', module: 'destination', version: 'v0', @@ -783,531 +556,51 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@3', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', + traits: { + age: 32, + email: 'test+3@rudderlabs.com', + phone: '+91 9399999999', + firstName: 'Test', + lastName: 'RudderStack', + ownerId: '15', }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, + }, + properties: { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, }, - os: { - name: 'iOS', - version: '14.0', + price: { + amount: 3000, + currency: 'USD', }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - company: { - name: 'Test Comp', - industry: 'test industry', - key1: 'value1', - key2: null, - key3: ['value1', 'value2'], - key4: { - foo: 'bar', - }, - }, - }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', - }, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - updateLastRequestAt: false, - }, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - update_last_request_at: false, - name: 'Name', - companies: [ - { - company_id: 'c0277b5c814453e5135f515f943d085a', - custom_attributes: { - key1: 'value1', - key3: '["value1","value2"]', - key4: '{"foo":"bar"}', - }, - name: 'Test Comp', - industry: 'test industry', - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'intercom', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', - context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - company: { - industry: 'test industry', - key1: 'value1', - key2: null, - }, - }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', - }, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - update_last_request_at: true, - name: 'Name', - companies: [], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'intercom', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', - context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - userId: 'test_user_id_1', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - }, - userAgent: 'unknown', - }, - properties: { - property1: 1, - property2: 'test', - property3: true, - property4: '2020-10-05T09:09:03.731Z', - property5: { - property1: 1, - property2: 'test', - property3: { - subProp1: { - a: 'a', - b: 'b', - }, - subProp2: ['a', 'b'], - }, - }, - properties6: null, - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', + }, + type: 'track', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, }, }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'track', - }, - destination: { Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - user_id: 'test_user_id_1', - email: 'test_1@test.com', - event_name: 'Test Event 2', - created: 1601493061, - metadata: { - revenue: { - amount: 1232, - currency: 'inr', - test: 123, - }, - price: { - amount: 3000, - currency: 'USD', - }, - article: { - url: 'https://example.org/ab1de.html', - value: 'the dude abides', - }, - property1: 1, - property2: 'test', - property3: true, - property4: '2020-10-05T09:09:03.731Z', - 'property5.property1': 1, - 'property5.property2': 'test', - 'property5.property3.subProp1.a': 'a', - 'property5.property3.subProp1.b': 'b', - 'property5.property3.subProp2[0]': 'a', - 'property5.property3.subProp2[1]': 'b', - properties6: null, - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'intercom', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', - context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', - }, - userAgent: 'unknown', + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'track', }, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, + metadata: { + jobId: 8, }, }, ], + method: 'POST', }, }, output: { @@ -1315,265 +608,20 @@ export const data = [ status: 200, body: [ { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - event_name: 'Test Event 2', - created: 1601493061, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + metadata: { + jobId: 8, }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'intercom', - description: 'Test 10: ERROR - Either of `email` or `userId` is required for Track call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', - context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', - }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'track', - }, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { statusCode: 400, - error: 'Either of `email` or `userId` is required for Track call', + error: + 'Event name is required for track call: Workflow: procWorkflow, Step: validateTrackPayload, ChildStep: undefined, OriginalError: Event name is required for track call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', - destType: 'INTERCOM', - module: 'destination', - implementation: 'native', - feature: 'processor', - }, - }, - ], - }, - }, - }, - { - name: 'intercom', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', - context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - externalId: [ - { - identifierType: 'email', - id: 'test@gmail.com', - }, - ], - mappedToDestination: true, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', - traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', - }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', - }, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', - email: 'test@gmail.com', - update_last_request_at: true, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', }, - statusCode: 200, }, ], }, @@ -1581,7 +629,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 12', + description: 'Successful track call', feature: 'processor', module: 'destination', version: 'v0', @@ -1590,76 +638,52 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@2', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', + age: 32, + email: 'test+2@rudderlabs.com', + phone: '+91 9299999999', firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', + lastName: 'RudderStack', + ownerId: '14', }, - userAgent: 'unknown', }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', + properties: { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + }, + event: 'Product Viewed', + type: 'track', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - sendAnonymousId: true, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 9, + }, }, ], + method: 'POST', }, }, output: { @@ -1668,38 +692,46 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { + FORM: {}, JSON: { - phone: '9876543210', - name: 'Test Name', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', + created_at: 1700628164, + email: 'test+2@rudderlabs.com', + event_name: 'Product Viewed', + metadata: { + price: { + amount: 3000, + currency: 'USD', + }, + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, }, - user_id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - update_last_request_at: true, + user_id: 'user@2', }, JSON_ARRAY: {}, XML: {}, - FORM: {}, }, + endpoint: 'https://api.intercom.io/events', + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + 'Intercom-Version': '2.10', + }, + method: 'POST', + type: 'REST', + userId: '', + version: '1', + params: {}, files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', }, statusCode: 200, + metadata: { + jobId: 9, + }, }, ], }, @@ -1707,7 +739,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 13: ERROR - Either of `email` or `userId` is required for Identify call', + description: 'Group call without groupId', feature: 'processor', module: 'destination', version: 'v0', @@ -1716,76 +748,46 @@ export const data = [ body: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@4', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - phone: '9876543210', - key1: 'value1', + email: 'test+4@rudderlabs.com', + phone: '+91 9499999999', + firstName: 'John', + lastName: 'Doe', + ownerId: '16', }, - userAgent: 'unknown', }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', + traits: { + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', + }, + type: 'group', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', sendAnonymousId: false, }, }, + metadata: { + jobId: 10, + }, }, ], + method: 'POST', }, }, output: { @@ -1793,14 +795,18 @@ export const data = [ status: 200, body: [ { + metadata: { + jobId: 10, + }, statusCode: 400, - error: 'Either of `email` or `userId` is required for Identify call', + error: + 'groupId is required for group call: Workflow: procWorkflow, Step: prepareCreateOrUpdateCompanyPayload, ChildStep: undefined, OriginalError: groupId is required for group call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', destType: 'INTERCOM', module: 'destination', - implementation: 'native', + implementation: 'cdkV2', feature: 'processor', }, }, @@ -1810,7 +816,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 14', + description: 'Successful group call to create or update company', feature: 'processor', module: 'destination', version: 'v0', @@ -1819,35 +825,47 @@ export const data = [ body: [ { message: { - groupId: 'test_company_id_wdasda', + userId: 'user@4', + groupId: 'rudderlabs', + channel: 'web', + context: { + traits: { + email: 'test+4@rudderlabs.com', + phone: '+91 9499999999', + firstName: 'John', + lastName: 'Doe', + ownerId: '16', + }, + }, traits: { - employees: 450, - plan: 'basic', - userId: 'sdfrsdfsdfsf', - email: 'test@test.com', - name: 'rudderUpdate', - size: '50', - industry: 'IT', - monthlySpend: '2131231', - remoteCreatedAt: '1683017572', - key1: 'val1', - }, - anonymousId: 'sdfrsdfsdfsf', - integrations: { - All: true, + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', }, type: 'group', - userId: 'sdfrsdfsdfsf', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'abcd=', - appId: 'asdasdasd', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 11, + }, }, ], + method: 'POST', }, }, output: { @@ -1856,72 +874,38 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/companies', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - plan: 'basic', - size: 50, - industry: 'IT', - monthly_spend: 2131231, - remote_created_at: 1683017572, - custom_attributes: { - employees: 450, - email: 'test@test.com', - key1: 'val1', - }, + company_id: 'rudderlabs', + custom_attributes: {}, + industry: 'CDP', + name: 'RudderStack', + plan: 'enterprise', + size: 500, + website: 'www.rudderstack.com', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, }, - files: {}, - userId: 'sdfrsdfsdfsf', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', + endpoint: 'https://api.intercom.io/companies', headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', Accept: 'application/json', - 'Intercom-Version': '1.4', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + 'Intercom-Version': '2.10', }, + method: 'POST', + type: 'REST', + userId: '', + version: '1', params: {}, - body: { - JSON: { - user_id: 'sdfrsdfsdfsf', - companies: [ - { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, files: {}, - userId: 'sdfrsdfsdfsf', }, statusCode: 200, + metadata: { + jobId: 11, + }, }, ], }, @@ -1929,7 +913,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 15', + description: 'Successful group call to add user to company', feature: 'processor', module: 'destination', version: 'v0', @@ -1938,68 +922,47 @@ export const data = [ body: [ { message: { - groupId: 'test_company_id', - traits: { - plan: 'basic', - name: 'rudderUpdate', - size: 50, - industry: 'IT', - monthlySpend: '2131231', - email: 'comanyemail@abc.com', - }, - anonymousId: '12312312', + userId: 'user@5', + groupId: 'rudderlabs', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, + traits: { + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + ownerId: '17', }, - timezone: 'Asia/Kolkata', - userAgent: 'unknown', }, - integrations: { - All: true, + traits: { + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', type: 'group', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'abcd=', - appId: 'asdasdasd', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 12, + }, }, ], + method: 'POST', }, }, output: { @@ -2008,37 +971,32 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/companies', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - company_id: 'test_company_id', - name: 'rudderUpdate', - plan: 'basic', - size: 50, - industry: 'IT', - monthly_spend: 2131231, - custom_attributes: { - email: 'comanyemail@abc.com', - }, + id: '657264e9018c0a647s45', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, + }, + endpoint: 'https://api.intercom.io/contacts/70701240741e45d040/companies', + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + 'Intercom-Version': '2.10', }, + method: 'POST', + type: 'REST', + userId: '', + version: '1', + params: {}, files: {}, - userId: '12312312', }, statusCode: 200, + metadata: { + jobId: 12, + }, }, ], }, @@ -2046,7 +1004,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 16', + description: 'Identify rEtl test', feature: 'processor', module: 'destination', version: 'v0', @@ -2055,40 +1013,39 @@ export const data = [ body: [ { message: { - groupId: 'test_company_id_wdasda', + userId: 'user@1', + channel: 'web', context: { - traits: { - email: 'testUser@test.com', - }, + mappedToDestination: true, }, traits: { - employees: 450, - plan: 'basic', - email: 'test@test.com', - name: 'rudderUpdate', - size: '50', - industry: 'IT', - website: 'url', - monthlySpend: '2131231', - remoteCreatedAt: '1683017572', - key1: 'val1', - }, - anonymousId: 'sdfrsdfsdfsf', - integrations: { - All: true, + email: 'test@rudderlabs.com', + phone: '+91 9999999999', + name: 'Test Rudderlabs', + owner_id: 13, }, - type: 'group', - userId: 'sdfrsdfsdfsf', + type: 'identify', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'abcd=', - appId: 'asdasdasd', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 13, + }, }, ], + method: 'POST', }, }, output: { @@ -2097,73 +1054,32 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/companies', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - plan: 'basic', - size: 50, - website: 'url', - industry: 'IT', - monthly_spend: 2131231, - remote_created_at: 1683017572, - custom_attributes: { - employees: 450, - email: 'test@test.com', - key1: 'val1', - }, + email: 'test@rudderlabs.com', + name: 'Test Rudderlabs', + phone: '+91 9999999999', + owner_id: 13, }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, }, - files: {}, - userId: 'sdfrsdfsdfsf', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', + endpoint: 'https://api.intercom.io/contacts', headers: { + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - user_id: 'sdfrsdfsdfsf', - email: 'testUser@test.com', - companies: [ - { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, + 'Intercom-Version': '2.10', }, + userId: '', + version: '1', + type: 'REST', + method: 'POST', files: {}, - userId: 'sdfrsdfsdfsf', + params: {}, }, + metadata: { jobId: 13 }, statusCode: 200, }, ], @@ -2172,7 +1088,7 @@ export const data = [ }, { name: 'intercom', - description: 'Test 17', + description: 'Track rEtl test', feature: 'processor', module: 'destination', version: 'v0', @@ -2181,46 +1097,47 @@ export const data = [ body: [ { message: { - groupId: 'test_company_id_wdasda', + userId: 'user@1', + channel: 'web', context: { - traits: { - email: 'testUser@test.com', - }, + mappedToDestination: true, }, traits: { - employees: 450, - plan: 'basic', - email: 'test@test.com', - name: 'rudderUpdate', - size: '50', - industry: 'IT', - website: 'url', - monthlySpend: '2131231', - remoteCreatedAt: '1683017572', - key1: 'val1', - key2: { - a: 'a', - b: 'b', + event_name: 'Product Viewed', + user_id: 'user@1', + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', }, - key3: [1, 2, 3], - key4: null, - }, - anonymousId: 'anonId', - integrations: { - All: true, }, - type: 'group', + event: 'Product Viewed', + type: 'track', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'abcd=', - appId: 'asdasdasd', - collectContext: false, - sendAnonymousId: true, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 14, + }, }, ], + method: 'POST', }, }, output: { @@ -2229,79 +1146,39 @@ export const data = [ body: [ { output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/companies', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - plan: 'basic', - size: 50, - website: 'url', - industry: 'IT', - monthly_spend: 2131231, - remote_created_at: 1683017572, - custom_attributes: { - employees: 450, - email: 'test@test.com', - key1: 'val1', - 'key2.a': 'a', - 'key2.b': 'b', - 'key3[0]': 1, - 'key3[1]': 2, - 'key3[2]': 3, - key4: null, + event_name: 'Product Viewed', + price: { + amount: 3000, + currency: 'USD', }, + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + user_id: 'user@1', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, + JSON_ARRAY: {}, }, - files: {}, - userId: 'anonId', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', + endpoint: 'https://api.intercom.io/events', headers: { + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', - Authorization: 'Bearer abcd=', Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, - body: { - JSON: { - user_id: 'anonId', - email: 'testUser@test.com', - companies: [ - { - company_id: 'test_company_id_wdasda', - name: 'rudderUpdate', - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, + 'Intercom-Version': '2.10', }, + userId: '', + version: '1', + type: 'REST', + method: 'POST', files: {}, - userId: 'anonId', + params: {}, }, + metadata: { jobId: 14 }, statusCode: 200, }, ], diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 74c514d082..f7c5942703 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -1,7 +1,7 @@ export const data = [ { name: 'intercom', - description: 'Test 0', + description: 'Intercom router tests', feature: 'router', module: 'destination', version: 'v0', @@ -11,155 +11,172 @@ export const data = [ input: [ { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@1', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', - }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, - }, - os: { - name: 'iOS', - version: '14.0', - }, - screen: { - density: 2, - height: 320, - width: 568, - }, - timezone: 'Asia/Kolkata', traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - name: 'Test Name', + age: 23, + email: 'test@rudderlabs.com', + phone: '+91 9999999999', firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - userId: 'test_user_id_1', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', + lastName: 'Rudderlabs', + address: 'california usa', + ownerId: '13', }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', + }, type: 'identify', - }, - metadata: { - jobId: 1, + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 1, + }, }, { message: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - channel: 'mobile', + userId: 'user@3', + channel: 'web', context: { - app: { - build: '1.0', - name: 'Test_Example', - namespace: 'com.example.testapp', - version: '1.0', - }, - device: { - id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - manufacturer: 'Apple', - model: 'iPhone', - name: 'iPod touch (7th generation)', - type: 'iOS', - }, - library: { - name: 'test-ios-library', - version: '1.0.7', + traits: { + age: 32, + email: 'test+3@rudderlabs.com', + phone: '+91 9399999999', + firstName: 'Test', + lastName: 'RudderStack', + ownerId: '15', }, - locale: 'en-US', - network: { - bluetooth: false, - carrier: 'unavailable', - cellular: false, - wifi: true, + }, + properties: { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, }, - os: { - name: 'iOS', - version: '14.0', + price: { + amount: 3000, + currency: 'USD', }, - screen: { - density: 2, - height: 320, - width: 568, + }, + event: 'Product Viewed', + type: 'track', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, }, - timezone: 'Asia/Kolkata', + }, + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + }, + metadata: { + jobId: 2, + }, + }, + { + message: { + userId: 'user@5', + groupId: 'rudderlabs', + channel: 'web', + context: { traits: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - firstName: 'Test', - lastName: 'Name', - createdAt: '2020-09-30T19:11:00.337Z', - email: 'test_1@test.com', - phone: '9876543210', - key1: 'value1', + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + ownerId: '17', }, - userAgent: 'unknown', - }, - event: 'Test Event 2', - integrations: { - All: true, - }, - messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', - originalTimestamp: '2020-09-30T19:11:00.337Z', - receivedAt: '2020-10-01T00:41:11.369+05:30', - request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', - sentAt: '2020-09-30T19:11:10.382Z', - timestamp: '2020-10-01T00:41:01.324+05:30', - type: 'identify', + }, + traits: { + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', + }, + type: 'group', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, }, metadata: { - jobId: 2, + jobId: 3, + }, + }, + { + message: { + userId: 'user@6', + groupId: 'rudderlabs', + channel: 'web', + context: { + traits: { + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + ownerId: '17', + }, + }, + traits: { + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', + isOpenSource: true, + }, + type: 'group', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', }, destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, }, }, + metadata: { + jobId: 4, + }, }, ], destType: 'intercom', }, + method: 'POST', }, }, output: { @@ -168,101 +185,187 @@ export const data = [ body: { output: [ { + batched: false, batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - }, - params: {}, body: { JSON: { - email: 'test_1@test.com', - phone: '9876543210', - name: 'Test Name', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - update_last_request_at: true, - user_id: 'test_user_id_1', + email: 'test@rudderlabs.com', + external_id: 'user@1', + last_seen_at: 1700628164, + name: 'Test Rudderlabs', + owner_id: 13, + phone: '+91 9999999999', custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', + address: 'california usa', + age: 23, }, }, XML: {}, - JSON_ARRAY: {}, FORM: {}, + JSON_ARRAY: {}, }, + endpoint: 'https://api.intercom.io/contacts', files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + headers: { + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Intercom-Version': '2.10', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, }, metadata: [ { jobId: 1, }, ], - batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, - }, - }, }, { + batched: false, batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', + body: { + FORM: {}, + JSON: { + created_at: 1700628164, + email: 'test+3@rudderlabs.com', + event_name: 'Product Viewed', + metadata: { + price: { + amount: 3000, + currency: 'USD', + }, + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + }, + user_id: 'user@3', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.intercom.io/events', + files: {}, headers: { + Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', - Authorization: 'Bearer intercomApiKey', Accept: 'application/json', - 'Intercom-Version': '1.4', + 'Intercom-Version': '2.10', }, + method: 'POST', params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + }, + metadata: [ + { + jobId: 2, + }, + ], + statusCode: 200, + }, + { + batched: false, + batchedRequest: { body: { JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - name: 'Test Name', - last_seen_user_agent: 'unknown', - update_last_request_at: true, - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, + id: '657264e9018c0a647s45', }, XML: {}, - JSON_ARRAY: {}, FORM: {}, + JSON_ARRAY: {}, }, + endpoint: 'https://api.intercom.io/contacts/70701240741e45d040/companies', files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + headers: { + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Intercom-Version': '2.10', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, }, metadata: [ { - jobId: 2, + jobId: 3, }, ], - batched: false, statusCode: 200, + }, + { + batched: false, + error: + '{"message":"Unable to Create or Update Company due to : [{\\"code\\":\\"parameter_invalid\\",\\"message\\":\\"Custom attribute \'isOpenSource\' does not exist\\"}]","destinationResponse":{"response":{"type":"error.list","request_id":"request_1","errors":[{"code":"parameter_invalid","message":"Custom attribute \'isOpenSource\' does not exist"}]},"status":401}}', + statTags: { + destType: 'INTERCOM', + errorCategory: 'network', + errorType: 'aborted', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', + }, destination: { Config: { - apiKey: 'intercomApiKey', - appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', - collectContext: false, + apiKey: 'testApiKey', + apiServer: 'standard', + sendAnonymousId: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, }, }, + metadata: [ + { + jobId: 4, + }, + ], + statusCode: 401, }, ], }, From 3f7b61e98944dc119084c74d7867981a51b80eb1 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Mon, 8 Jan 2024 17:01:50 +0530 Subject: [PATCH 02/13] chore: code review changes --- src/cdk/v2/destinations/intercom/config.js | 1 + src/cdk/v2/destinations/intercom/procWorkflow.yaml | 2 +- test/integrations/destinations/intercom/processor/data.ts | 4 ++-- test/integrations/destinations/intercom/router/data.ts | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/config.js b/src/cdk/v2/destinations/intercom/config.js index 96b7abd280..164e7d593d 100644 --- a/src/cdk/v2/destinations/intercom/config.js +++ b/src/cdk/v2/destinations/intercom/config.js @@ -20,6 +20,7 @@ const ReservedUserAttributes = [ 'firstname', 'createdAt', 'timestamp', + 'lastSeenAt', 'originalTimestamp', 'unsubscribedFromEmails', ]; diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 0452faf431..c74d2f71ff 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -55,7 +55,7 @@ steps: email: {{{{$.getGenericPaths("email")}}}}, phone: {{{{$.getGenericPaths("phone")}}}}, avatar: {{{{$.getGenericPaths("avatar")}}}}, - last_seen_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), + last_seen_at: $.toSeconds(.context.traits.lastSeenAt), role: .traits.role || .context.traits.role, signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), owner_id: .traits.ownerId || .context.traits.ownerId ? Number(.traits.ownerId || .context.traits.ownerId) : undefined, diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index e8dedcf6ec..490d6bcbf6 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -231,6 +231,7 @@ export const data = [ lastName: 'Rudderlabs', address: 'california usa', ownerId: '13', + lastSeenAt: '2023-11-10T14:42:44.724Z', }, }, type: 'identify', @@ -267,7 +268,7 @@ export const data = [ JSON: { email: 'test@rudderlabs.com', external_id: 'user@1', - last_seen_at: 1700628164, + last_seen_at: 1699627364, name: 'Test Rudderlabs', owner_id: 13, phone: '+91 9999999999', @@ -358,7 +359,6 @@ export const data = [ JSON: { email: 'test+2@rudderlabs.com', external_id: 'user@2', - last_seen_at: 1700628164, name: 'Test RudderStack', owner_id: 14, phone: '+91 9299999999', diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index f7c5942703..2fc9f34d70 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -22,6 +22,7 @@ export const data = [ lastName: 'Rudderlabs', address: 'california usa', ownerId: '13', + lastSeenAt: '2023-11-10T14:42:44.724Z', }, }, type: 'identify', @@ -191,7 +192,7 @@ export const data = [ JSON: { email: 'test@rudderlabs.com', external_id: 'user@1', - last_seen_at: 1700628164, + last_seen_at: 1699627364, name: 'Test Rudderlabs', owner_id: 13, phone: '+91 9999999999', From 6c2c44232c9f7ea94cead8c65e74f47de33dc426 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 11 Jan 2024 09:43:53 +0530 Subject: [PATCH 03/13] chore: code review changes --- src/cdk/v2/destinations/intercom/procWorkflow.yaml | 4 ++-- src/cdk/v2/destinations/intercom/utils.js | 2 +- src/cdk/v2/destinations/intercom/utils.test.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index c74d2f71ff..7aac715854 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -58,13 +58,13 @@ steps: last_seen_at: $.toSeconds(.context.traits.lastSeenAt), role: .traits.role || .context.traits.role, signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), - owner_id: .traits.ownerId || .context.traits.ownerId ? Number(.traits.ownerId || .context.traits.ownerId) : undefined, + owner_id: Number(.traits.ownerId || .context.traits.ownerId) || undefined, unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails }) payload.name = $.getName(.message); payload.custom_attributes = .message.context.traits || {}; payload.custom_attributes = $.filterCustomAttributes(payload, "user"); - payload.external_id = !(payload.external_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; + payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; payload; - name: prepareIdentifyPayload diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index a578f8ba41..7691d5aba4 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -104,7 +104,7 @@ const filterCustomAttributes = (payload, type) => { }); if (isDefinedAndNotNull(customAttributes) && Object.keys(customAttributes).length > 0) { - customAttributes = flattenJson(customAttributes); + customAttributes = flattenJson(customAttributes, '_'); } } return customAttributes; diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index f9a03fd386..b2676c6609 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -314,7 +314,7 @@ describe('filterCustomAttributes utility test', () => { custom_attributes: { source: 'rudder-js-sdk', data: { nestedAttribute: 'nestedValue' } }, }; const result = filterCustomAttributes(payload, 'user'); - expect(result).toEqual({ source: 'rudder-js-sdk', 'data.nestedAttribute': 'nestedValue' }); + expect(result).toEqual({ source: 'rudder-js-sdk', data_nestedAttribute: 'nestedValue' }); }); it('Should return null when custom_attributes is null', () => { From fcddc257534e908e86031a4f2b2be562250747fe Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 11 Jan 2024 11:31:15 +0530 Subject: [PATCH 04/13] chore: code review changes --- .../destinations/intercom/procWorkflow.yaml | 202 ++++++++---------- .../destinations/intercom/processor/data.ts | 6 +- 2 files changed, 98 insertions(+), 110 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 7aac715854..48170b0467 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -39,7 +39,7 @@ steps: template: | $.addExternalIdToTraits(.message); const payload = $.getFieldValueFromMessage(.message, "traits"); - payload; + $.context.payload = payload; - name: searchContact condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}} @@ -47,117 +47,105 @@ steps: const contactId = await $.searchContact(.message, .destination); contactId; - - name: identifyEtlPayload - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && !.message.context.mappedToDestination - template: | - const payload = .message.({ - external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, - email: {{{{$.getGenericPaths("email")}}}}, - phone: {{{{$.getGenericPaths("phone")}}}}, - avatar: {{{{$.getGenericPaths("avatar")}}}}, - last_seen_at: $.toSeconds(.context.traits.lastSeenAt), - role: .traits.role || .context.traits.role, - signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), - owner_id: Number(.traits.ownerId || .context.traits.ownerId) || undefined, - unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails - }) - payload.name = $.getName(.message); - payload.custom_attributes = .message.context.traits || {}; - payload.custom_attributes = $.filterCustomAttributes(payload, "user"); - payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; - payload; - - - name: prepareIdentifyPayload - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} - template: | - const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; - $.context.payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.identifyEtlPayload; - $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; - $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - - - name: validateIdentifyPayload + - name: identifyPayload condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} - template: | - $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); + steps: + - name: streaming + condition: "!.message.context.mappedToDestination" + template: | + const payload = .message.({ + external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, + email: {{{{$.getGenericPaths("email")}}}}, + phone: {{{{$.getGenericPaths("phone")}}}}, + avatar: {{{{$.getGenericPaths("avatar")}}}}, + last_seen_at: $.toSeconds(.context.traits.lastSeenAt), + role: .traits.role || .context.traits.role, + signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), + owner_id: Number(.traits.ownerId || .context.traits.ownerId) || undefined, + unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails + }) + payload.name = $.getName(.message); + payload.custom_attributes = .message.context.traits || {}; + payload.custom_attributes = $.filterCustomAttributes(payload, "user"); + payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; + $.context.payload = payload + - name: validate + template: | + $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); + - name: prepareFinalPayload + template: | + const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; + $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; + $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - name: trackEtlPayload - condition: $.outputs.messageType === {{$.EventType.TRACK}} && !.message.context.mappedToDestination - template: | - let payload = .message.({ - event_name: .event, - created_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), - user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, - email: {{{{$.getGenericPaths("email")}}}}, - id: .properties.id || .traits.id, - metadata: .properties - }) - payload = $.addMetadataToPayload(payload); - payload.user_id = !(payload.user_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.user_id; - payload; - - - name: prepareTrackPayload - condition: $.outputs.messageType === {{$.EventType.TRACK}} - template: | - $.context.payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.trackEtlPayload; - $.context.requestMethod = 'POST'; - $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "events"; - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - - - name: validateTrackPayload condition: $.outputs.messageType === {{$.EventType.TRACK}} - template: | - $.assert($.context.payload.event_name, "Event name is required for track call"); - $.assert($.context.payload.user_id || $.context.payload.email, "Either email or userId is required for Track call"); - - - name: groupEtlPayload - condition: $.outputs.messageType === {{$.EventType.GROUP}} && !.message.context.mappedToDestination - template: | - const payload = .message.({ - company_id: {{{{$.getGenericPaths("groupId")}}}}, - name: {{{{$.getGenericPaths("name")}}}}, - website: {{{{$.getGenericPaths("website")}}}}, - plan: .traits.plan || .context.traits.plan, - size: Number(.traits.size || .context.traits.size), - industry: .traits.industry || .context.traits.industry, - monthly_spend: .traits.monthlySpend || .context.traits.monthlySpend ? Number(.traits.monthlySpend || .context.traits.monthlySpend) : undefined, - remote_created_at: .traits.remoteCreatedAt || .context.traits.remoteCreatedAt ? Number(.traits.remoteCreatedAt || .context.traits.remoteCreatedAt) : undefined - }) - payload.custom_attributes = .message.traits || {}; - payload.custom_attributes = $.filterCustomAttributes(payload, "company"); - payload; - - - name: prepareAddUserToCompanyPayload - condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.isDefinedAndNotNull($.outputs.searchContact) - template: | - $.assert(.message.groupId, "groupId is required for group call"); - let payload = .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.groupEtlPayload; - const contactId = $.outputs.searchContact; - const companyId = await $.createOrUpdateCompany(payload, .destination); - $.assert(companyId, "Unable to create or update company"); - payload.requestBodyJson = { - id: companyId - } - payload.endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts" + "/" + contactId + "/" + "companies"; - payload; - - - name: prepareCreateOrUpdateCompanyPayload - condition: $.outputs.messageType === {{$.EventType.GROUP}} && !$.isDefinedAndNotNull($.outputs.searchContact) - template: | - $.assert(.message.groupId, "groupId is required for group call"); - let payload = { - requestBodyJson: .message.context.mappedToDestination === true ? $.outputs.rEtlPayload : $.outputs.groupEtlPayload - } - payload.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; - payload; - - - name: prepareGroupPayload + steps: + - name: streaming + condition: "!.message.context.mappedToDestination" + template: | + let payload = .message.({ + event_name: .event, + created_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), + user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, + email: {{{{$.getGenericPaths("email")}}}}, + id: .properties.id || .traits.id, + metadata: .properties + }) + payload = $.addMetadataToPayload(payload); + payload.user_id = !(payload.user_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.user_id; + $.context.payload = payload + - name: validate + template: | + $.assert($.context.payload.event_name, "Event name is required for track call"); + $.assert($.context.payload.user_id || $.context.payload.email, "Either email or userId is required for Track call"); + - name: prepareFinalPayload + template: | + $.context.requestMethod = 'POST'; + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "events"; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: groupPayload condition: $.outputs.messageType === {{$.EventType.GROUP}} - template: | - $.context.payload = $.isDefinedAndNotNull($.outputs.searchContact) ? $.outputs.prepareAddUserToCompanyPayload.requestBodyJson : $.outputs.prepareCreateOrUpdateCompanyPayload.requestBodyJson; - $.context.requestMethod = 'POST'; - $.context.endpoint = $.isDefinedAndNotNull($.outputs.searchContact) ? $.outputs.prepareAddUserToCompanyPayload.endpoint : $.outputs.prepareCreateOrUpdateCompanyPayload.endpoint; - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + steps: + - name: validateMessage + template: | + $.assert(.message.groupId, "groupId is required for group call"); + - name: streaming + condition: "!.message.context.mappedToDestination" + template: | + const payload = .message.({ + company_id: {{{{$.getGenericPaths("groupId")}}}}, + name: {{{{$.getGenericPaths("name")}}}}, + website: {{{{$.getGenericPaths("website")}}}}, + plan: .traits.plan || .context.traits.plan, + size: Number(.traits.size || .context.traits.size), + industry: .traits.industry || .context.traits.industry, + monthly_spend: .traits.monthlySpend || .context.traits.monthlySpend ? Number(.traits.monthlySpend || .context.traits.monthlySpend) : undefined, + remote_created_at: .traits.remoteCreatedAt || .context.traits.remoteCreatedAt ? Number(.traits.remoteCreatedAt || .context.traits.remoteCreatedAt) : undefined + }) + payload.custom_attributes = .message.traits || {}; + payload.custom_attributes = $.filterCustomAttributes(payload, "company"); + $.context.payload = payload; + - name: whenSearchContactFound + condition: $.isDefinedAndNotNull($.outputs.searchContact) + template: | + const contactId = $.outputs.searchContact; + const companyId = await $.createOrUpdateCompany($.context.payload, .destination); + $.assert(companyId, "Unable to create or update company"); + $.context.payload = { + id: companyId, + }; + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts" + "/" + contactId + "/" + "companies"; + else: + name: whenSearchContactNotFound + template: | + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; + - name: prepareFinalPayload + template: + $.context.requestMethod = 'POST'; + $.removeUndefinedAndNullValues($.context.payload) - name: buildResponseForProcessTransformation description: build response diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 490d6bcbf6..480b68d876 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -454,7 +454,7 @@ export const data = [ }, statusCode: 400, error: - 'Either email or userId is required for Identify call: Workflow: procWorkflow, Step: validateIdentifyPayload, ChildStep: undefined, OriginalError: Either email or userId is required for Identify call', + 'Either email or userId is required for Identify call: Workflow: procWorkflow, Step: identifyPayload, ChildStep: validate, OriginalError: Either email or userId is required for Identify call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -613,7 +613,7 @@ export const data = [ }, statusCode: 400, error: - 'Event name is required for track call: Workflow: procWorkflow, Step: validateTrackPayload, ChildStep: undefined, OriginalError: Event name is required for track call', + 'Event name is required for track call: Workflow: procWorkflow, Step: trackEtlPayload, ChildStep: validate, OriginalError: Event name is required for track call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -800,7 +800,7 @@ export const data = [ }, statusCode: 400, error: - 'groupId is required for group call: Workflow: procWorkflow, Step: prepareCreateOrUpdateCompanyPayload, ChildStep: undefined, OriginalError: groupId is required for group call', + 'groupId is required for group call: Workflow: procWorkflow, Step: groupPayload, ChildStep: validateMessage, OriginalError: groupId is required for group call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', From 0037e6302e66725152a44e46e5a66770e01ba6bc Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Wed, 17 Jan 2024 18:32:44 +0530 Subject: [PATCH 05/13] chore: added backward compatibility for updateLastRequestAt field --- src/cdk/v2/destinations/intercom/procWorkflow.yaml | 6 +++++- test/integrations/destinations/intercom/router/data.ts | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 48170b0467..fa43f7f36c 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -53,6 +53,9 @@ steps: - name: streaming condition: "!.message.context.mappedToDestination" template: | + const timestamp = .message.().( + {{{{$.getGenericPaths("timestamp")}}}}; + ); const payload = .message.({ external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, email: {{{{$.getGenericPaths("email")}}}}, @@ -63,10 +66,11 @@ steps: signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), owner_id: Number(.traits.ownerId || .context.traits.ownerId) || undefined, unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails - }) + }); payload.name = $.getName(.message); payload.custom_attributes = .message.context.traits || {}; payload.custom_attributes = $.filterCustomAttributes(payload, "user"); + payload.last_seen_at = payload.last_seen_at === undefined && .destination.Config.updateLastRequestAt ? $.toSeconds(timestamp) : payload.last_seen_at; payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; $.context.payload = payload - name: validate diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 2fc9f34d70..5ee531ff75 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -22,7 +22,6 @@ export const data = [ lastName: 'Rudderlabs', address: 'california usa', ownerId: '13', - lastSeenAt: '2023-11-10T14:42:44.724Z', }, }, type: 'identify', @@ -39,6 +38,7 @@ export const data = [ apiKey: 'testApiKey', apiServer: 'standard', sendAnonymousId: false, + updateLastRequestAt: true, }, }, metadata: { @@ -85,6 +85,7 @@ export const data = [ apiKey: 'testApiKey', apiServer: 'standard', sendAnonymousId: false, + updateLastRequestAt: false, }, }, metadata: { @@ -192,7 +193,7 @@ export const data = [ JSON: { email: 'test@rudderlabs.com', external_id: 'user@1', - last_seen_at: 1699627364, + last_seen_at: 1700628164, name: 'Test Rudderlabs', owner_id: 13, phone: '+91 9999999999', @@ -223,6 +224,7 @@ export const data = [ apiKey: 'testApiKey', apiServer: 'standard', sendAnonymousId: false, + updateLastRequestAt: true, }, DestinationDefinition: { Config: { @@ -280,6 +282,7 @@ export const data = [ apiKey: 'testApiKey', apiServer: 'standard', sendAnonymousId: false, + updateLastRequestAt: false, }, DestinationDefinition: { Config: { From 70ee9bda35b6bd5f47481358767c7d91ad9f2454 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Wed, 24 Jan 2024 10:45:13 +0530 Subject: [PATCH 06/13] chore: intercom backward compatibility support --- src/cdk/v2/destinations/intercom/config.js | 99 +- .../destinations/intercom/procWorkflow.yaml | 201 +- src/cdk/v2/destinations/intercom/utils.js | 132 +- .../v2/destinations/intercom/utils.test.js | 185 +- .../destinations/intercom/network.ts | 1 - .../destinations/intercom/processor/data.ts | 2558 ++++++++++++++++- .../destinations/intercom/router/data.ts | 9 +- 7 files changed, 3057 insertions(+), 128 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/config.js b/src/cdk/v2/destinations/intercom/config.js index 164e7d593d..ceaf8e1951 100644 --- a/src/cdk/v2/destinations/intercom/config.js +++ b/src/cdk/v2/destinations/intercom/config.js @@ -5,42 +5,67 @@ const BASE_AU_ENDPOINT = 'https://api.au.intercom.io'; const SEARCH_CONTACT_ENDPOINT = 'contacts/search'; const CREATE_OR_UPDATE_COMPANY_ENDPOINT = 'companies'; -const ReservedUserAttributes = [ - 'userId', - 'role', - 'email', - 'phone', - 'name', - 'avatar', - 'company', - 'ownerId', - 'lastName', - 'lastname', - 'firstName', - 'firstname', - 'createdAt', - 'timestamp', - 'lastSeenAt', - 'originalTimestamp', - 'unsubscribedFromEmails', -]; +const ReservedAttributes = { + oldVersionUserAttributes: [ + 'userId', + 'email', + 'phone', + 'name', + 'createdAt', + 'firstName', + 'lastName', + 'firstname', + 'lastname', + 'company', + ], + newVersionUserAttributes: [ + 'userId', + 'role', + 'email', + 'phone', + 'name', + 'avatar', + 'company', + 'ownerId', + 'lastName', + 'lastname', + 'firstName', + 'firstname', + 'createdAt', + 'timestamp', + 'lastSeenAt', + 'originalTimestamp', + 'unsubscribedFromEmails', + ], + oldVersionCompanyAttributes: [ + 'remoteCreatedAt', + 'monthlySpend', + 'industry', + 'website', + 'size', + 'plan', + 'name', + 'userId', + ], + newVersionCompanyAttributes: [ + 'tags', + 'size', + 'plan', + 'name', + 'email', + 'userId', + 'website', + 'industry', + 'segments', + 'userCount', + 'createdAt', + 'sessionCount', + 'monthlySpend', + 'remoteCreatedAt', + ], +}; -const ReservedCompanyAttributes = [ - 'tags', - 'size', - 'plan', - 'name', - 'email', - 'userId', - 'website', - 'industry', - 'segments', - 'userCount', - 'createdAt', - 'sessionCount', - 'monthlySpend', - 'remoteCreatedAt', -]; +const ReservedCompanyProperties = ['id', 'name', 'industry']; const MetadataTypes = { richLink: ['url', 'value'], monetaryAmount: ['amount', 'currency'] }; @@ -49,8 +74,8 @@ module.exports = { MetadataTypes, BASE_EU_ENDPOINT, BASE_AU_ENDPOINT, - ReservedUserAttributes, + ReservedAttributes, SEARCH_CONTACT_ENDPOINT, - ReservedCompanyAttributes, + ReservedCompanyProperties, CREATE_OR_UPDATE_COMPANY_ENDPOINT, }; diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index fa43f7f36c..a96bb0aae0 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -15,6 +15,7 @@ bindings: path: ../../../../v0/util - name: addExternalIdToTraits path: ../../../../v0/util + - path: ../../bindings/jsontemplate steps: - name: checkIfProcessed @@ -39,24 +40,18 @@ steps: template: | $.addExternalIdToTraits(.message); const payload = $.getFieldValueFromMessage(.message, "traits"); - $.context.payload = payload; + payload; - name: searchContact - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}} + condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && .destination.Config.apiVersion === "latest" template: | const contactId = await $.searchContact(.message, .destination); contactId; - - name: identifyPayload - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} - steps: - - name: streaming - condition: "!.message.context.mappedToDestination" - template: | - const timestamp = .message.().( - {{{{$.getGenericPaths("timestamp")}}}}; - ); - const payload = .message.({ + - name: identifyTransformationForLatestVersion + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "latest" && !.message.context.mappedToDestination + template: | + const payload = .message.({ external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, email: {{{{$.getGenericPaths("email")}}}}, phone: {{{{$.getGenericPaths("phone")}}}}, @@ -67,59 +62,90 @@ steps: owner_id: Number(.traits.ownerId || .context.traits.ownerId) || undefined, unsubscribed_from_emails: .traits.unsubscribedFromEmails || .context.traits.unsubscribedFromEmails }); - payload.name = $.getName(.message); - payload.custom_attributes = .message.context.traits || {}; - payload.custom_attributes = $.filterCustomAttributes(payload, "user"); - payload.last_seen_at = payload.last_seen_at === undefined && .destination.Config.updateLastRequestAt ? $.toSeconds(timestamp) : payload.last_seen_at; - payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; - $.context.payload = payload - - name: validate - template: | - $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); - - name: prepareFinalPayload - template: | - const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; - $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; - $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + !(payload.external_id) && .destination.Config.sendAnonymousId ? payload.external_id = .message.anonymousId; + payload; - - name: trackEtlPayload - condition: $.outputs.messageType === {{$.EventType.TRACK}} - steps: - - name: streaming - condition: "!.message.context.mappedToDestination" - template: | - let payload = .message.({ + - name: identifyPayloadForLatestVersion + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "latest" + template: | + const payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForLatestVersion; + payload.name = $.getName(.message); + payload.custom_attributes = .message.context.traits || {}; + payload.custom_attributes = $.filterCustomAttributes(payload, "user", .destination); + payload.external_id = !payload.external_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.external_id; + $.context.payload = payload; + $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); + const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; + $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; + $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: identifyTransformationForOlderVersion + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "1.4" && !.message.context.mappedToDestination + template: | + const payload = .message.({ + user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, + email: {{{{$.getGenericPaths("email")}}}}, + phone: {{{{$.getGenericPaths("phone")}}}}, + signed_up_at: $.toSeconds(.traits.createdAt || .context.traits.createdAt), + last_seen_user_agent: .context.userAgent, + }); + !(payload.user_id) && .destination.Config.sendAnonymousId ? payload.user_id = .message.anonymousId; + payload; + + - name: identifyPayloadForOlderVersion + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "1.4" + template: | + let payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForOlderVersion; + payload = { + ...payload, + name : $.getName(.message), + custom_attributes : .message.traits || .message.context.traits || {}, + update_last_request_at: typeof .destination.Config.updateLastRequestAt === 'boolean' ? .destination.Config.updateLastRequestAt : true + } + payload.companies = $.getCompaniesList(payload); + payload.custom_attributes = !.message.context.mappedToDestination ? $.filterCustomAttributes(payload, "user", .destination); + payload.user_id = !payload.user_id && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.user_id; + $.context.payload = payload; + $.assert($.context.payload.user_id || $.context.payload.email, "Either of `email` or `userId` is required for Identify call"); + $.context.requestMethod = 'POST'; + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "users"; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: trackTransformation + condition: $.outputs.messageType === {{$.EventType.TRACK}} && !.message.context.mappedToDestination + template: | + const timestamp = .message.().( + {{{{$.getGenericPaths("timestamp")}}}}; + ); + const payload = .message.({ event_name: .event, - created_at: $.toSeconds({{{{$.getGenericPaths("timestamp")}}}}), user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, email: {{{{$.getGenericPaths("email")}}}}, - id: .properties.id || .traits.id, metadata: .properties - }) - payload = $.addMetadataToPayload(payload); - payload.user_id = !(payload.user_id) && .destination.Config.sendAnonymousId && .message.anonymousId ? .message.anonymousId : payload.user_id; - $.context.payload = payload - - name: validate - template: | - $.assert($.context.payload.event_name, "Event name is required for track call"); - $.assert($.context.payload.user_id || $.context.payload.email, "Either email or userId is required for Track call"); - - name: prepareFinalPayload - template: | - $.context.requestMethod = 'POST'; - $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "events"; - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - - - name: groupPayload - condition: $.outputs.messageType === {{$.EventType.GROUP}} - steps: - - name: validateMessage - template: | - $.assert(.message.groupId, "groupId is required for group call"); - - name: streaming - condition: "!.message.context.mappedToDestination" - template: | - const payload = .message.({ + }); + .destination.Config.apiVersion === "latest" ? payload.id = .message.properties.id || .message.traits.id; + .destination.Config.apiVersion === "latest" ? payload.created_at = $.toSeconds(timestamp); + .destination.Config.apiVersion === "1.4" ? payload.created = $.toSeconds(timestamp); + !(payload.user_id) && .destination.Config.sendAnonymousId ? payload.user_id = .message.anonymousId; + payload; + + - name: trackPayload + condition: $.outputs.messageType === {{$.EventType.TRACK}} + template: | + let payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.trackTransformation; + payload = $.addMetadataToPayload(payload); + $.context.payload = payload; + $.assert($.context.payload.event_name, "Event name is required for track call"); + $.assert($.context.payload.user_id || $.context.payload.email, "Either email or userId is required for Track call"); + $.context.requestMethod = 'POST'; + $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "events"; + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + + - name: groupTransformation + condition: $.outputs.messageType === {{$.EventType.GROUP}} && !.message.context.mappedToDestination + template: | + const payload = .message.({ company_id: {{{{$.getGenericPaths("groupId")}}}}, name: {{{{$.getGenericPaths("name")}}}}, website: {{{{$.getGenericPaths("website")}}}}, @@ -128,9 +154,18 @@ steps: industry: .traits.industry || .context.traits.industry, monthly_spend: .traits.monthlySpend || .context.traits.monthlySpend ? Number(.traits.monthlySpend || .context.traits.monthlySpend) : undefined, remote_created_at: .traits.remoteCreatedAt || .context.traits.remoteCreatedAt ? Number(.traits.remoteCreatedAt || .context.traits.remoteCreatedAt) : undefined - }) + }); + payload; + + - name: groupPayloadForLatestVersion + condition: $.outputs.messageType === {{$.EventType.GROUP}} && .destination.Config.apiVersion === "latest" + steps: + - name: validateMessageAndPreparePayload + template: | + $.assert(.message.groupId, "groupId is required for group call"); + const payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.groupTransformation; payload.custom_attributes = .message.traits || {}; - payload.custom_attributes = $.filterCustomAttributes(payload, "company"); + payload.custom_attributes = $.filterCustomAttributes(payload, "company", .destination); $.context.payload = payload; - name: whenSearchContactFound condition: $.isDefinedAndNotNull($.outputs.searchContact) @@ -149,14 +184,42 @@ steps: - name: prepareFinalPayload template: $.context.requestMethod = 'POST'; - $.removeUndefinedAndNullValues($.context.payload) + $.removeUndefinedAndNullValues($.context.payload); - - name: buildResponseForProcessTransformation - description: build response + - name: groupPayloadForOlderVersion + condition: $.outputs.messageType === {{$.EventType.GROUP}} && .destination.Config.apiVersion === "1.4" template: | + $.context.response = []; const response = $.defaultRequestConfig(); - response.body.JSON = $.removeUndefinedAndNullValues($.context.payload); - response.endpoint = $.context.endpoint; - response.method = $.context.requestMethod; + let payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.groupTransformation; + payload = { + ...payload, + custom_attributes : $.getFieldValueFromMessage(.message, "traits") || {} + } + payload.custom_attributes = $.filterCustomAttributes(payload, "company", .destination); + response.body.JSON = $.removeUndefinedAndNullValues(payload); + response.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; response.headers = $.getHeaders(.destination); - response; \ No newline at end of file + response.method = "POST"; + response.userId = .message.anonymousId; + $.context.response.push(response); + const attachUserAndCompanyResponse = $.attachUserAndCompany(.message, .destination.Config); + attachUserAndCompanyResponse ? attachUserAndCompanyResponse.userId = .message.anonymousId; + attachUserAndCompanyResponse ? $.context.response.push(attachUserAndCompanyResponse); + + - name: buildResponseForProcessTransformation + description: Build response for multiple transformed event + condition: $.context.response && $.context.response.length > 0 + template: | + $.context.response; + else: + name: buildResponseForProcessTransformation + description: Build response for single transformed event + template: | + const response = $.defaultRequestConfig(); + response.body.JSON = $.context.payload; + response.endpoint = $.context.endpoint; + response.method = $.context.requestMethod; + response.headers = $.getHeaders(.destination); + .destination.Config.apiVersion === "1.4" && $.outputs.messageType !== {{$.EventType.GROUP}} ? response.userId = .message.anonymousId; + response; diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 7691d5aba4..126fa6588d 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -1,3 +1,5 @@ +const md5 = require('md5'); +const get = require('get-value'); const { NetworkError } = require('@rudderstack/integrations-lib'); const tags = require('../../../../v0/util/tags'); const { httpPOST } = require('../../../../adapters/network'); @@ -10,7 +12,9 @@ const { getIntegrationsObj, isDefinedAndNotNull, isHttpStatusSuccess, + defaultRequestConfig, getFieldValueFromMessage, + defaultPostRequestConfig, removeUndefinedAndNullValues, } = require('../../../../v0/util'); const { JSON_MIME_TYPE } = require('../../../../v0/util/constant'); @@ -19,9 +23,9 @@ const { MetadataTypes, BASE_EU_ENDPOINT, BASE_AU_ENDPOINT, - ReservedUserAttributes, + ReservedAttributes, SEARCH_CONTACT_ENDPOINT, - ReservedCompanyAttributes, + ReservedCompanyProperties, CREATE_OR_UPDATE_COMPANY_ENDPOINT, } = require('./config'); @@ -34,7 +38,7 @@ const getHeaders = (destination) => ({ 'Content-Type': JSON_MIME_TYPE, Authorization: `Bearer ${destination.Config.apiKey}`, Accept: JSON_MIME_TYPE, - 'Intercom-Version': '2.10', + 'Intercom-Version': destination.Config.apiVersion === '1.4' ? '1.4' : '2.10', }); /** @@ -43,8 +47,9 @@ const getHeaders = (destination) => ({ * @returns */ const getBaseEndpoint = (destination) => { - const { apiServer } = destination.Config; + const { apiServer, apiVersion } = destination.Config; + if (apiVersion === '1.4') return BASE_ENDPOINT; switch (apiServer) { case 'eu': return BASE_EU_ENDPOINT; @@ -89,25 +94,127 @@ const getName = (message) => { return undefined; }; +/** + * Returns company payload + * @param {*} payload + * @returns + */ +const getCompaniesList = (payload) => { + const company = get(payload, 'custom_attributes.company'); + if (!company) return undefined; + const companiesList = []; + if (company.name || company.id) { + const customAttributes = {}; + Object.keys(company).forEach((key) => { + // If key is not in ReservedCompanyProperties + if (!ReservedCompanyProperties.includes(key)) { + const val = company[key]; + if (val !== Object(val)) { + customAttributes[key] = val; + } else { + customAttributes[key] = JSON.stringify(val); + } + } + }); + + companiesList.push({ + company_id: company.id || md5(company.name), + custom_attributes: removeUndefinedAndNullValues(customAttributes), + name: company.name, + industry: company.industry, + }); + } + return companiesList; +}; + +/** + * Returns if email or userId is present in payload or not + * @param {*} message + * @param {*} Config + * @returns + */ +const checkIfEmailOrUserIdPresent = (message, Config) => { + const { context, anonymousId } = message; + let { userId } = message; + if (Config.sendAnonymousId && !userId) { + userId = anonymousId; + } + return !!(userId || context?.traits?.email); +}; + +/** + * Returns add user to company payload + * @param {*} message + * @param {*} Config + * @returns + */ +const attachUserAndCompany = (message, Config) => { + if (!checkIfEmailOrUserIdPresent(message, Config)) return undefined; + const email = message.context?.traits?.email; + const { userId, anonymousId, traits, groupId } = message; + const requestBody = {}; + if (userId) { + requestBody.user_id = userId; + } + if (Config.sendAnonymousId && !userId) { + requestBody.user_id = anonymousId; + } + if (email) { + requestBody.email = email; + } + const companyObj = { + company_id: groupId, + }; + if (traits?.name) { + companyObj.name = traits.name; + } + requestBody.companies = [companyObj]; + const response = defaultRequestConfig(); + response.method = defaultPostRequestConfig.requestMethod; + response.endpoint = `${BASE_ENDPOINT}/users`; + response.headers = { + 'Content-Type': JSON_MIME_TYPE, + Authorization: `Bearer ${Config.apiKey}`, + Accept: JSON_MIME_TYPE, + 'Intercom-Version': '1.4', + }; + response.body.JSON = requestBody; + response.userId = anonymousId; + return response; +}; + /** * Returns custom attributes for identify and group calls (for contact and company in intercom) * @param {*} payload * @param {*} type * @returns */ -const filterCustomAttributes = (payload, type) => { - const ReservedAttributes = type === 'user' ? ReservedUserAttributes : ReservedCompanyAttributes; - let { custom_attributes: customAttributes } = payload; +const filterCustomAttributes = (payload, type, destination) => { + let ReservedAttributesList; + if (type === 'user') { + ReservedAttributesList = + destination.Config.apiVersion === '1.4' + ? ReservedAttributes.oldVersionUserAttributes + : ReservedAttributes.newVersionUserAttributes; + } else { + ReservedAttributesList = + destination.Config.apiVersion === '1.4' + ? ReservedAttributes.oldVersionCompanyAttributes + : ReservedAttributes.newVersionCompanyAttributes; + } + let customAttributes = { ...get(payload, 'custom_attributes') }; if (customAttributes) { - ReservedAttributes.forEach((trait) => { + ReservedAttributesList.forEach((trait) => { if (customAttributes[trait]) delete customAttributes[trait]; }); - if (isDefinedAndNotNull(customAttributes) && Object.keys(customAttributes).length > 0) { - customAttributes = flattenJson(customAttributes, '_'); + customAttributes = + destination.Config.apiVersion === 'latest' + ? flattenJson(customAttributes, '_') + : flattenJson(customAttributes); } } - return customAttributes; + return Object.keys(customAttributes).length === 0 ? undefined : customAttributes; }; /** @@ -247,8 +354,11 @@ module.exports = { searchContact, getLookUpField, getBaseEndpoint, + getCompaniesList, addMetadataToPayload, + attachUserAndCompany, createOrUpdateCompany, filterCustomAttributes, + checkIfEmailOrUserIdPresent, separateReservedAndRestMetadata, }; diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index b2676c6609..f2e07ab4d6 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -1,3 +1,4 @@ +const md5 = require('md5'); const axios = require('axios'); const { getName, @@ -5,9 +6,12 @@ const { searchContact, getLookUpField, getBaseEndpoint, + getCompaniesList, addMetadataToPayload, + attachUserAndCompany, createOrUpdateCompany, filterCustomAttributes, + checkIfEmailOrUserIdPresent, separateReservedAndRestMetadata, } = require('./utils'); const { BASE_ENDPOINT, BASE_EU_ENDPOINT, BASE_AU_ENDPOINT } = require('./config'); @@ -305,22 +309,22 @@ describe('getName utility test', () => { describe('filterCustomAttributes utility test', () => { it('Should return an empty object when all custom attributes are reserved attributes', () => { const payload = { custom_attributes: { email: 'test@rudder.com', name: 'rudder test' } }; - const result = filterCustomAttributes(payload, 'user'); - expect(result).toEqual({}); + const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'latest' } }); + expect(result).toBeUndefined(); }); it('Should return a flattened object when custom attributes are not null, not reserved attributes and nested', () => { const payload = { custom_attributes: { source: 'rudder-js-sdk', data: { nestedAttribute: 'nestedValue' } }, }; - const result = filterCustomAttributes(payload, 'user'); + const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'latest' } }); expect(result).toEqual({ source: 'rudder-js-sdk', data_nestedAttribute: 'nestedValue' }); }); it('Should return null when custom_attributes is null', () => { const payload = { custom_attributes: null }; - const result = filterCustomAttributes(payload, 'company'); - expect(result).toBeNull(); + const result = filterCustomAttributes(payload, 'company', { Config: { apiVersion: 'latest' } }); + expect(result).toBeUndefined(); }); }); @@ -586,3 +590,174 @@ describe('createOrUpdateCompany utility test', () => { } }); }); + +describe('checkIfEmailOrUserIdPresent utility test', () => { + it('Should return true when userId is present in message', () => { + const message = { + userId: '12345', + context: { + traits: { + email: 'test@example.com', + }, + }, + }; + const Config = { + sendAnonymousId: true, + apiKey: '1234567890', + }; + const result = checkIfEmailOrUserIdPresent(message, Config); + expect(result).toBe(true); + }); + + it('Should return true when email is present in message', () => { + const message = { + context: { + traits: { + email: 'test@example.com', + }, + }, + }; + const Config = { + sendAnonymousId: true, + apiKey: '1234567890', + }; + const result = checkIfEmailOrUserIdPresent(message, Config); + expect(result).toBe(true); + }); + + it('Should return true when both userId and email are present in message', () => { + const message = { + userId: '12345', + context: { + traits: { + email: 'test@example.com', + }, + }, + }; + const Config = { + sendAnonymousId: true, + apiKey: '1234567890', + }; + const result = checkIfEmailOrUserIdPresent(message, Config); + expect(result).toBe(true); + }); + + it('Should return false when no email or userId is present', () => { + const message = { anonymousId: 'anon@123' }; + const Config = { + sendAnonymousId: false, + apiKey: '1234567890', + }; + const result = checkIfEmailOrUserIdPresent(message, Config); + expect(result).toBe(false); + }); +}); + +describe('getCompaniesList utility test', () => { + it('Should return an array with one object containing the company_id, custom_attributes, name and industry properties when the payload contains a company object with name or id properties', () => { + const payload = { + custom_attributes: { + company: { + name: 'rudderlabs', + industry: 'Tech', + }, + }, + }; + + const result = getCompaniesList(payload); + + expect(result).toEqual([ + { + company_id: md5('rudderlabs'), + custom_attributes: {}, + name: 'rudderlabs', + industry: 'Tech', + }, + ]); + }); + + it('Should return undefined when the payload does not contain a company object', () => { + const payload = {}; + const result = getCompaniesList(payload); + expect(result).toBeUndefined(); + }); + + it('Should return an empty array when the company object in the payload does not have name or id properties', () => { + const payload = { + custom_attributes: { + company: {}, + }, + }; + const result = getCompaniesList(payload); + expect(result).toEqual([]); + }); + + it('Should return an array with one object containing the company_id, custom_attributes, name and industry properties when the payload contains a company object with name and id properties', () => { + const payload = { + custom_attributes: { + company: { + name: 'Company A', + id: '123', + industry: 'Tech', + }, + }, + }; + const result = getCompaniesList(payload); + expect(result).toEqual([ + { + company_id: '123', + custom_attributes: {}, + name: 'Company A', + industry: 'Tech', + }, + ]); + }); +}); + +describe('attachUserAndCompany utility test', () => { + it('should return a valid response object when only email and groupId are present', () => { + const message = { + context: { + traits: { + email: 'test@example.com', + }, + }, + groupId: 'group123', + }; + const Config = { + sendAnonymousId: false, + apiKey: 'testApiKey', + }; + + const expectedResponse = { + method: 'POST', + params: {}, + type: 'REST', + version: '1', + endpoint: 'https://api.intercom.io/users', + files: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer testApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + body: { + FORM: {}, + JSON: { + email: 'test@example.com', + companies: [ + { + company_id: 'group123', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + userId: undefined, + }; + const response = attachUserAndCompany(message, Config); + expect(response).toEqual(expectedResponse); + }); +}); diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index 339ef2746c..76540fd38d 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -317,7 +317,6 @@ const deleteNwData = [ plan: 'enterprise', size: 500, industry: 'CDP', - custom_attributes: {}, }, headers: { Accept: 'application/json', diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 480b68d876..1dc89a1a61 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -34,6 +34,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -106,6 +107,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -173,6 +175,7 @@ export const data = [ }, }, Config: { + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -246,6 +249,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -337,6 +341,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -432,6 +437,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -454,7 +460,7 @@ export const data = [ }, statusCode: 400, error: - 'Either email or userId is required for Identify call: Workflow: procWorkflow, Step: identifyPayload, ChildStep: validate, OriginalError: Either email or userId is required for Identify call', + 'Either email or userId is required for Identify call: Workflow: procWorkflow, Step: identifyPayloadForLatestVersion, ChildStep: undefined, OriginalError: Either email or userId is required for Identify call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -509,6 +515,7 @@ export const data = [ }, Config: { apiKey: 'invalidApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -591,6 +598,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -613,7 +621,7 @@ export const data = [ }, statusCode: 400, error: - 'Event name is required for track call: Workflow: procWorkflow, Step: trackEtlPayload, ChildStep: validate, OriginalError: Event name is required for track call', + 'Event name is required for track call: Workflow: procWorkflow, Step: trackPayload, ChildStep: undefined, OriginalError: Event name is required for track call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -674,6 +682,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -778,6 +787,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -800,7 +810,7 @@ export const data = [ }, statusCode: 400, error: - 'groupId is required for group call: Workflow: procWorkflow, Step: groupPayload, ChildStep: validateMessage, OriginalError: groupId is required for group call', + 'groupId is required for group call: Workflow: procWorkflow, Step: groupPayloadForLatestVersion, ChildStep: validateMessageAndPreparePayload, OriginalError: groupId is required for group call', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -856,6 +866,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -877,7 +888,6 @@ export const data = [ body: { JSON: { company_id: 'rudderlabs', - custom_attributes: {}, industry: 'CDP', name: 'RudderStack', plan: 'enterprise', @@ -953,6 +963,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -1036,6 +1047,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -1128,6 +1140,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -1185,4 +1198,2541 @@ export const data = [ }, }, }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + userId: 'test_user_id_1', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + address: { + city: 'Kolkata', + state: 'West Bengal', + }, + originalArray: [ + { + nested_field: 'nested value', + tags: ['tag_1', 'tag_2', 'tag_3'], + }, + { + nested_field: 'nested value', + tags: ['tag_1'], + }, + { + nested_field: 'nested value', + }, + ], + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 15, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + user_id: 'test_user_id_1', + email: 'test_1@test.com', + phone: '9876543210', + name: 'Test Name', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + 'address.city': 'Kolkata', + 'address.state': 'West Bengal', + 'originalArray[0].nested_field': 'nested value', + 'originalArray[0].tags[0]': 'tag_1', + 'originalArray[0].tags[1]': 'tag_2', + 'originalArray[0].tags[2]': 'tag_3', + 'originalArray[1].nested_field': 'nested value', + 'originalArray[1].tags[0]': 'tag_1', + 'originalArray[2].nested_field': 'nested value', + }, + update_last_request_at: true, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 15, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 16, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: true, + name: 'Test Name', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 16, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 17, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: true, + name: 'Name', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 17, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + firstName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 18, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: true, + name: 'Name', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 18, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old Version: Identify call without email and userId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + firstName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 19, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: + 'Either of `email` or `userId` is required for Identify call: Workflow: procWorkflow, Step: identifyPayloadForOlderVersion, ChildStep: undefined, OriginalError: Either of `email` or `userId` is required for Identify call', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', + }, + metadata: { + jobId: 19, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + company: { + name: 'Test Comp', + id: 'company_id', + industry: 'test industry', + key1: 'value1', + key2: { + a: 'a', + }, + key3: [1, 2, 3], + }, + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 20, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: true, + name: 'Name', + companies: [ + { + company_id: 'company_id', + custom_attributes: { + key1: 'value1', + key2: '{"a":"a"}', + key3: '[1,2,3]', + }, + name: 'Test Comp', + industry: 'test industry', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 20, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + company: { + name: 'Test Comp', + industry: 'test industry', + key1: 'value1', + key2: null, + key3: ['value1', 'value2'], + key4: { + foo: 'bar', + }, + }, + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + updateLastRequestAt: false, + }, + }, + metadata: { + jobId: 21, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: false, + name: 'Name', + companies: [ + { + company_id: 'c0277b5c814453e5135f515f943d085a', + custom_attributes: { + key1: 'value1', + key3: '["value1","value2"]', + key4: '{"foo":"bar"}', + }, + name: 'Test Comp', + industry: 'test industry', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 21, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + company: { + industry: 'test industry', + key1: 'value1', + key2: null, + }, + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 22, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + update_last_request_at: true, + name: 'Name', + companies: [], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 22, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful track call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + userId: 'test_user_id_1', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + properties: { + property1: 1, + property2: 'test', + property3: true, + property4: '2020-10-05T09:09:03.731Z', + property5: { + property1: 1, + property2: 'test', + property3: { + subProp1: { + a: 'a', + b: 'b', + }, + subProp2: ['a', 'b'], + }, + }, + properties6: null, + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'track', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 23, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + user_id: 'test_user_id_1', + email: 'test_1@test.com', + event_name: 'Test Event 2', + created: 1601493061, + metadata: { + revenue: { + amount: 1232, + currency: 'inr', + test: 123, + }, + price: { + amount: 3000, + currency: 'USD', + }, + article: { + url: 'https://example.org/ab1de.html', + value: 'the dude abides', + }, + property1: 1, + property2: 'test', + property3: true, + property4: '2020-10-05T09:09:03.731Z', + 'property5.property1': 1, + 'property5.property2': 'test', + 'property5.property3.subProp1.a': 'a', + 'property5.property3.subProp1.b': 'b', + 'property5.property3.subProp2[0]': 'a', + 'property5.property3.subProp2[1]': 'b', + properties6: null, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 23, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version - successful track call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'track', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 24, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/events', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + event_name: 'Test Event 2', + created: 1601493061, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 24, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : Track call without email or userId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'track', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 25, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: + 'Either email or userId is required for Track call: Workflow: procWorkflow, Step: trackPayload, ChildStep: undefined, OriginalError: Either email or userId is required for Track call', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', + }, + metadata: { + jobId: 25, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + externalId: [ + { + identifierType: 'email', + id: 'test@gmail.com', + }, + ], + mappedToDestination: true, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + }, + }, + metadata: { + jobId: 26, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + email: 'test@gmail.com', + update_last_request_at: true, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 26, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful identify call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + sendAnonymousId: true, + }, + }, + metadata: { + jobId: 27, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer intercomApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + phone: '9876543210', + name: 'Test Name', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + user_id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + update_last_request_at: true, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + statusCode: 200, + metadata: { + jobId: 27, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : Identify call without email or userId', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'intercomApiKey', + apiVersion: '1.4', + appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', + collectContext: false, + sendAnonymousId: false, + }, + }, + metadata: { + jobId: 28, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: + 'Either of `email` or `userId` is required for Identify call: Workflow: procWorkflow, Step: identifyPayloadForOlderVersion, ChildStep: undefined, OriginalError: Either of `email` or `userId` is required for Identify call', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'INTERCOM', + module: 'destination', + implementation: 'cdkV2', + feature: 'processor', + }, + metadata: { + jobId: 28, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful group call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + groupId: 'test_company_id_wdasda', + traits: { + employees: 450, + plan: 'basic', + userId: 'sdfrsdfsdfsf', + email: 'test@test.com', + name: 'rudderUpdate', + size: '50', + industry: 'IT', + monthlySpend: '2131231', + remoteCreatedAt: '1683017572', + key1: 'val1', + }, + anonymousId: 'sdfrsdfsdfsf', + integrations: { + All: true, + }, + type: 'group', + userId: 'sdfrsdfsdfsf', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'abcd=', + appId: 'asdasdasd', + apiVersion: '1.4', + collectContext: false, + }, + }, + metadata: { + jobId: 29, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/companies', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + plan: 'basic', + size: 50, + industry: 'IT', + monthly_spend: 2131231, + remote_created_at: 1683017572, + custom_attributes: { + employees: 450, + email: 'test@test.com', + key1: 'val1', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'sdfrsdfsdfsf', + }, + statusCode: 200, + metadata: { + jobId: 29, + }, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + user_id: 'sdfrsdfsdfsf', + companies: [ + { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'sdfrsdfsdfsf', + }, + statusCode: 200, + metadata: { + jobId: 29, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful group call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + groupId: 'test_company_id', + traits: { + plan: 'basic', + name: 'rudderUpdate', + size: 50, + industry: 'IT', + monthlySpend: '2131231', + email: 'comanyemail@abc.com', + }, + anonymousId: '12312312', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + userAgent: 'unknown', + }, + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + type: 'group', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'abcd=', + apiVersion: '1.4', + appId: 'asdasdasd', + collectContext: false, + }, + }, + metadata: { + jobId: 30, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/companies', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + company_id: 'test_company_id', + name: 'rudderUpdate', + plan: 'basic', + size: 50, + industry: 'IT', + monthly_spend: 2131231, + custom_attributes: { + email: 'comanyemail@abc.com', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '12312312', + }, + statusCode: 200, + metadata: { + jobId: 30, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful group call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + groupId: 'test_company_id_wdasda', + context: { + traits: { + email: 'testUser@test.com', + }, + }, + traits: { + employees: 450, + plan: 'basic', + email: 'test@test.com', + name: 'rudderUpdate', + size: '50', + industry: 'IT', + website: 'url', + monthlySpend: '2131231', + remoteCreatedAt: '1683017572', + key1: 'val1', + }, + anonymousId: 'sdfrsdfsdfsf', + integrations: { + All: true, + }, + type: 'group', + userId: 'sdfrsdfsdfsf', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'abcd=', + apiVersion: '1.4', + appId: 'asdasdasd', + collectContext: false, + }, + }, + metadata: { + jobId: 31, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/companies', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + plan: 'basic', + size: 50, + website: 'url', + industry: 'IT', + monthly_spend: 2131231, + remote_created_at: 1683017572, + custom_attributes: { + employees: 450, + email: 'test@test.com', + key1: 'val1', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'sdfrsdfsdfsf', + }, + statusCode: 200, + metadata: { + jobId: 31, + }, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + user_id: 'sdfrsdfsdfsf', + email: 'testUser@test.com', + companies: [ + { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'sdfrsdfsdfsf', + }, + statusCode: 200, + metadata: { + jobId: 31, + }, + }, + ], + }, + }, + }, + { + name: 'intercom', + description: 'Old version : successful group call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + groupId: 'test_company_id_wdasda', + context: { + traits: { + email: 'testUser@test.com', + }, + }, + traits: { + employees: 450, + plan: 'basic', + email: 'test@test.com', + name: 'rudderUpdate', + size: '50', + industry: 'IT', + website: 'url', + monthlySpend: '2131231', + remoteCreatedAt: '1683017572', + key1: 'val1', + key2: { + a: 'a', + b: 'b', + }, + key3: [1, 2, 3], + key4: null, + }, + anonymousId: 'anonId', + integrations: { + All: true, + }, + type: 'group', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'abcd=', + appId: 'asdasdasd', + apiVersion: '1.4', + collectContext: false, + sendAnonymousId: true, + }, + }, + metadata: { + jobId: 32, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/companies', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + plan: 'basic', + size: 50, + website: 'url', + industry: 'IT', + monthly_spend: 2131231, + remote_created_at: 1683017572, + custom_attributes: { + employees: 450, + email: 'test@test.com', + key1: 'val1', + 'key2.a': 'a', + 'key2.b': 'b', + 'key3[0]': 1, + 'key3[1]': 2, + 'key3[2]': 3, + key4: null, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anonId', + }, + statusCode: 200, + metadata: { + jobId: 32, + }, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer abcd=', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + user_id: 'anonId', + email: 'testUser@test.com', + companies: [ + { + company_id: 'test_company_id_wdasda', + name: 'rudderUpdate', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'anonId', + }, + statusCode: 200, + metadata: { + jobId: 32, + }, + }, + ], + }, + }, + }, ]; diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 5ee531ff75..c8708562b5 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -37,6 +37,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, updateLastRequestAt: true, }, @@ -84,6 +85,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, updateLastRequestAt: false, }, @@ -125,6 +127,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -167,6 +170,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', + apiVersion: 'latest', apiServer: 'standard', sendAnonymousId: false, }, @@ -193,7 +197,6 @@ export const data = [ JSON: { email: 'test@rudderlabs.com', external_id: 'user@1', - last_seen_at: 1700628164, name: 'Test Rudderlabs', owner_id: 13, phone: '+91 9999999999', @@ -223,6 +226,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, updateLastRequestAt: true, }, @@ -281,6 +285,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, updateLastRequestAt: false, }, @@ -325,6 +330,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, }, DestinationDefinition: { @@ -356,6 +362,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', + apiVersion: 'latest', sendAnonymousId: false, }, DestinationDefinition: { From 80c89a57849486507f4e92367b34516bbef5d107 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 25 Jan 2024 09:13:30 +0530 Subject: [PATCH 07/13] chore: pr conflicts resolved --- .github/workflows/component-test-report.yml | 68 + .github/workflows/prepare-for-dev-deploy.yml | 2 +- .../workflows/prepare-for-prod-dt-deploy.yml | 2 +- .../workflows/prepare-for-prod-ut-deploy.yml | 2 +- .github/workflows/ut-tests.yml | 2 +- .gitignore | 5 +- CHANGELOG.md | 32 + package-lock.json | 6 +- package.json | 4 +- .../v2/destinations/ortto/procWorkflow.yaml | 3 +- .../v2/destinations/the_trade_desk/utils.js | 49 +- src/v0/destinations/klaviyo/transform.js | 3 + .../marketo_bulk_upload/fileUpload.js | 4 +- .../destinations/marketo_bulk_upload/poll.js | 2 +- .../destinations/marketo_bulk_upload/util.js | 23 +- src/v0/destinations/mp/transform.js | 4 +- src/v0/destinations/slack/util.js | 4 +- src/v0/destinations/tiktok_ads/config.js | 10 + .../tiktok_ads/data/TikTokTrack.json | 16 + .../tiktok_ads/data/TikTokTrackV2.json | 133 + src/v0/destinations/tiktok_ads/transform.js | 10 +- src/v0/destinations/tiktok_ads/transformV2.js | 738 + src/v0/destinations/tiktok_ads/util.js | 44 +- src/v0/destinations/tiktok_ads/util.test.js | 79 +- src/v0/sources/mailjet/transform.js | 15 +- src/v0/util/index.js | 1 + .../data/salesforce/proxy_response.json | 105 - test/__mocks__/data/salesforce/response.json | 47 - test/__tests__/adobe_analytics.test.js | 30 - test/__tests__/appsFlyer.test.js | 7 - test/__tests__/data/adobe_analytics.json | 4764 ---- test/__tests__/data/af_input.json | 1089 - test/__tests__/data/af_output.json | 357 - test/__tests__/data/af_router_input.json | 200 - test/__tests__/data/af_router_output.json | 133 - .../data/criteo_audience_proxy_input.json | 220 - .../data/criteo_audience_proxy_output.json | 167 - .../criteo_audience_router_rETL_input.json | 124 - .../criteo_audience_router_rETL_output.json | 106 - .../data/dcm_floodlight_cdk_output.json | 398 - test/__tests__/data/dcm_floodlight_input.json | 3664 --- .../__tests__/data/dcm_floodlight_output.json | 398 - test/__tests__/data/dynamic_yield.json | 714 - test/__tests__/data/eloqua.json | 359 - .../data/facebook_pixel_proxy_input.json | 200 - .../data/facebook_pixel_proxy_output.json | 223 - test/__tests__/data/fb_proxy_input.json | 156 - test/__tests__/data/fb_proxy_output.json | 117 - test/__tests__/data/fullstory.json | 354 - test/__tests__/data/heap_cdk_output.json | 180 - test/__tests__/data/kafka_batch_input.json | 0 test/__tests__/data/kafka_batch_output.json | 0 test/__tests__/data/kochava_cdk_output.json | 529 - test/__tests__/data/kochava_input.json | 811 - test/__tests__/data/kochava_output.json | 529 - test/__tests__/data/lambda.json | 334 - test/__tests__/data/lambda_router_input.json | 19396 ---------------- test/__tests__/data/lambda_router_output.json | 9727 -------- .../__tests__/data/launchdarkly_audience.json | 495 - test/__tests__/data/leanplum_input.json | 924 - test/__tests__/data/leanplum_output.json | 703 - .../__tests__/data/leanplum_router_input.json | 142 - .../data/leanplum_router_output.json | 176 - test/__tests__/data/lemnisk.json | 983 - test/__tests__/data/lemnisk_router.json | 639 - test/__tests__/data/lytics_cdk_output.json | 342 - test/__tests__/data/lytics_input.json | 948 - test/__tests__/data/lytics_output.json | 342 - test/__tests__/data/lytics_router_input.json | 194 - test/__tests__/data/lytics_router_output.json | 131 - test/__tests__/data/mailjet.json | 145 - test/__tests__/data/mailjet_batch.json | 640 - test/__tests__/data/mailjet_router.json | 86 - test/__tests__/data/mailjet_source.json | 258 +- test/__tests__/data/mailmodo.json | 573 - .../__tests__/data/mailmodo_router_input.json | 141 - .../data/mailmodo_router_output.json | 121 - .../marketo_bulk_upload_jobStatus_output.json | 4 +- test/__tests__/data/moengage_input.json | 1661 -- test/__tests__/data/moengage_output.json | 810 - .../__tests__/data/moengage_router_input.json | 232 - .../data/moengage_router_output.json | 189 - test/__tests__/data/monetate_input.json | 1860 -- test/__tests__/data/monetate_output.json | 741 - .../__tests__/data/monetate_router_input.json | 129 - .../data/monetate_router_output.json | 111 - test/__tests__/data/new_relic_cdk_output.json | 204 - test/__tests__/data/new_relic_input.json | 418 - test/__tests__/data/new_relic_output.json | 204 - test/__tests__/data/ometria_batch_input.json | 219 - test/__tests__/data/ometria_batch_output.json | 75 - test/__tests__/data/ometria_input.json | 780 - test/__tests__/data/ometria_output.json | 189 - test/__tests__/data/one_signal.json | 1431 -- .../data/one_signal_router_input.json | 118 - .../data/one_signal_router_output.json | 141 - test/__tests__/data/pagerduty.json | 569 - test/__tests__/data/pagerduty_router.json | 286 - test/__tests__/data/pardot_router_input.json | 596 - test/__tests__/data/pardot_router_output.json | 385 - test/__tests__/data/personalize_input.json | 2918 --- test/__tests__/data/personalize_output.json | 334 - .../pinterest_tag_router_batch_output.json | 30 +- .../pinterest_tag_router_error_input.json | 3 +- .../pinterest_tag_router_error_output.json | 3 +- .../data/pinterest_tag_router_input.json | 30 +- .../data/pinterest_tag_router_output.json | 30 +- test/__tests__/data/rockerbox.json | 598 - .../data/rockerbox_router_input.json | 168 - .../data/rockerbox_router_output.json | 158 - test/__tests__/data/sendgrid.json | 1301 -- test/__tests__/data/sendgrid_batch.json | 941 - test/__tests__/data/sendgrid_router.json | 152 - test/__tests__/data/sfmc_input.json | 997 - test/__tests__/data/sfmc_output.json | 311 - test/__tests__/data/sfmc_router_input.json | 158 - test/__tests__/data/sfmc_router_output.json | 146 - .../snapchat_custom_audience_proxy_input.json | 102 - ...snapchat_custom_audience_proxy_output.json | 71 - ...iktok_ads_offline_events_router_input.json | 142 - ...ktok_ads_offline_events_router_output.json | 193 - .../data/tiktok_ads_proxy_input.json | 368 - .../data/tiktok_ads_proxy_output.json | 124 - test/__tests__/data/userlist_cdk_output.json | 248 - test/__tests__/data/userlist_input.json | 537 - test/__tests__/data/userlist_output.json | 251 - .../__tests__/data/userlist_router_input.json | 128 - .../data/userlist_router_output.json | 172 - test/__tests__/data/vitally_cdk_output.json | 83 - test/__tests__/data/vitally_input.json | 81 - test/__tests__/data/vitally_output.json | 83 - test/__tests__/data/webhook_input.json | 1148 - test/__tests__/data/webhook_output.json | 1075 - test/__tests__/data/webhook_router_input.json | 214 - .../__tests__/data/webhook_router_output.json | 257 - test/__tests__/data/woopra.json | 281 - test/__tests__/data/zapier_cdk_output.json | 242 - test/__tests__/data/zapier_input.json | 176 - test/__tests__/dcm_floodlight-cdk.test.ts | 33 - test/__tests__/dcm_floodlight.test.js | 6 - test/__tests__/dynamic_yield-cdk.test.ts | 32 - test/__tests__/eloqua-cdk.test.ts | 35 - test/__tests__/fullstory-cdk.test.ts | 32 - test/__tests__/kochava-cdk.test.ts | 33 - test/__tests__/kochava.test.js | 6 - test/__tests__/lambda.test.js | 46 - .../launchdarkly_audience-cdk.test.ts | 42 - test/__tests__/leanplum.test.js | 49 - .../lemniskMarketingAutomation.test.js | 44 - test/__tests__/lytics-cdk.test.ts | 33 - test/__tests__/lytics.test.js | 7 - test/__tests__/mailjet.test.js | 57 - test/__tests__/mailjet_source.test.js | 2 +- test/__tests__/mailmodo.test.js | 52 - test/__tests__/moengage.test.js | 48 - test/__tests__/monetate.test.js | 49 - test/__tests__/new_relic-cdk.test.ts | 33 - test/__tests__/new_relic.test.js | 6 - test/__tests__/ometria.test.js | 52 - test/__tests__/one_signal.test.js | 46 - test/__tests__/pagerduty.test.js | 43 - test/__tests__/personalize.test.js | 28 - test/__tests__/pinterestConversion.test.js | 3 + test/__tests__/rockerbox.test.js | 45 - test/__tests__/sendgrid.test.js | 58 - test/__tests__/sfmc.test.js | 49 - test/__tests__/userlist-cdk.test.ts | 33 - test/__tests__/userlist.test.js | 7 - test/__tests__/utilities/test-utils.js | 6 +- test/__tests__/vitally-cdk.test.ts | 33 - test/__tests__/vitally.test.js | 6 - test/__tests__/webhook-cdk.test.ts | 58 - test/__tests__/zapier-cdk.test.ts | 33 - .../data/iterable/handler_input.json | 93 - .../data/iterable/handler_output.json | 32 - .../data/iterable/nw_client_data.json | 138 - test/integrations/component.test.ts | 43 +- .../active_campaign/router/data.ts | 136 +- .../destinations/adj/router/data.ts | 176 +- .../destinations/af/router/data.ts | 12 +- .../destinations/airship/router/data.ts | 182 +- .../destinations/algolia/router/data.ts | 244 +- .../destinations/am/batch/data.ts | 59 + .../destinations/am/router/data.ts | 101 +- .../destinations/appcues/router/data.ts | 107 +- .../destinations/attentive_tag/router/data.ts | 60 +- .../destinations/autopilot/router/data.ts | 132 +- .../destinations/blueshift/router/data.ts | 74 +- .../destinations/bqstream/router/data.ts | 180 +- .../destinations/branch/router/data.ts | 111 +- .../destinations/braze/router/data.ts | 220 +- .../campaign_manager/router/data.ts | 115 +- .../destinations/candu/router/data.ts | 39 +- .../destinations/clevertap/router/data.ts | 71 +- .../destinations/clickup/router/data.ts | 750 +- .../destinations/courier/router/data.ts | 56 +- .../criteo_audience/router/data.ts | 290 +- .../destinations/custify/router/data.ts | 423 +- .../destinations/customerio/router/data.ts | 152 +- .../destinations/delighted/router/data.ts | 346 +- .../destinations/discord/router/data.ts | 124 +- .../destinations/drip/router/data.ts | 373 +- .../destinations/engage/router/data.ts | 127 +- .../facebook_conversions/router/data.ts | 178 +- .../router/data.ts | 549 +- .../facebook_pixel/router/data.ts | 180 +- .../destinations/fb/router/data.ts | 120 +- .../fb_custom_audience/router/data.ts | 266 +- .../destinations/freshmarketer/router/data.ts | 635 +- .../destinations/freshsales/router/data.ts | 336 +- .../destinations/ga/router/data.ts | 815 +- .../destinations/ga360/router/data.ts | 815 +- .../destinations/gainsight/router/data.ts | 863 +- .../destinations/gainsight_px/router/data.ts | 139 +- .../destinations/gladly/router/data.ts | 242 +- .../router/data.ts | 101 +- .../router/data.ts | 179 +- .../router/data.ts | 46 +- .../google_cloud_function/router/data.ts | 218 +- .../destinations/googlesheets/router/data.ts | 373 +- .../destinations/heap/router/data.ts | 352 +- .../destinations/hs/router/data.ts | 910 +- .../destinations/impact/router/data.ts | 112 +- .../destinations/indicative/router/data.ts | 86 +- .../destinations/intercom/router/data.ts | 16 +- .../destinations/iterable/router/data.ts | 246 +- .../destinations/june/router/data.ts | 64 +- .../destinations/kafka/batch/data.ts | 343 +- .../destinations/keen/router/data.ts | 112 +- .../destinations/kissmetrics/router/data.ts | 54 +- .../destinations/klaviyo/processor/data.ts | 2443 +- .../klaviyo/processor/ecomTestData.ts | 344 + .../klaviyo/processor/groupTestData.ts | 136 + .../klaviyo/processor/identifyTestData.ts | 551 + .../klaviyo/processor/screenTestData.ts | 97 + .../klaviyo/processor/trackTestData.ts | 316 + .../klaviyo/processor/validationTestData.ts | 62 + .../destinations/klaviyo/router/data.ts | 186 +- .../destinations/kustomer/router/data.ts | 99 +- .../destinations/lambda/router/data.ts | 186 +- .../launchdarkly_audience/processor/data.ts | 68 + .../destinations/leanplum/router/data.ts | 132 +- .../destinations/lemnisk/router/data.ts | 95 +- .../destinations/lytics/router/data.ts | 92 +- .../destinations/mailchimp/router/data.ts | 266 +- .../destinations/mailjet/router/data.ts | 672 + .../destinations/mailmodo/router/data.ts | 147 +- .../destinations/marketo/router/data.ts | 1142 +- .../marketo_static_list/router/data.ts | 3290 +-- .../destinations/mautic/router/data.ts | 58 +- .../destinations/moengage/router/data.ts | 80 +- .../destinations/monday/router/data.ts | 62 +- .../destinations/monetate/router/data.ts | 136 +- .../destinations/mp/processor/data.ts | 3 +- .../destinations/mp/router/data.ts | 534 +- .../destinations/ometria/router/data.ts | 49 +- .../destinations/one_signal/router/data.ts | 100 +- .../optimizely_fullstack/router/data.ts | 235 +- .../destinations/ortto/processor/data.ts | 214 + .../destinations/ortto/router/data.ts | 6 +- .../destinations/pagerduty/router/data.ts | 76 +- .../destinations/pardot/router/data.ts | 315 +- .../destinations/persistiq/router/data.ts | 21 +- .../destinations/pinterest_tag/router/data.ts | 859 +- .../destinations/pipedream/router/data.ts | 133 +- .../destinations/posthog/router/data.ts | 74 +- .../destinations/profitwell/router/data.ts | 22 +- .../destinations/reddit/router/data.ts | 158 +- .../destinations/refiner/router/data.ts | 62 +- .../destinations/rockerbox/router/data.ts | 112 +- .../destinations/salesforce/router/data.ts | 108 +- .../destinations/sendgrid/router/data.ts | 1025 +- .../destinations/sendinblue/router/data.ts | 136 +- .../destinations/serenytics/router/data.ts | 84 +- .../integrations/destinations/sfmc/network.ts | 14 + .../destinations/sfmc/processor/data.ts | 1735 ++ .../destinations/sfmc/router/data.ts | 338 + .../destinations/signl4/router/data.ts | 78 +- .../destinations/singular/router/data.ts | 309 +- .../destinations/slack/processor/data.ts | 4000 ++-- .../destinations/slack/router/data.ts | 124 +- .../snapchat_conversion/router/data.ts | 8 + .../snapchat_custom_audience/router/data.ts | 37 +- .../destinations/splitio/router/data.ts | 93 +- .../destinations/stormly/router/data.ts | 73 +- .../the_trade_desk/router/data.ts | 318 +- .../destinations/tiktok_ads/mocks.ts | 5 + .../destinations/tiktok_ads/processor/data.ts | 1868 +- .../destinations/tiktok_ads/router/data.ts | 2384 +- .../processor/data.ts | 1233 +- .../tiktok_ads_offline_events/router/data.ts | 135 +- .../tiktok_audience/router/data.ts | 229 +- .../destinations/trengo/router/data.ts | 205 +- .../destinations/user/router/data.ts | 40 +- .../destinations/userlist/router/data.ts | 330 + .../destinations/vero/router/data.ts | 146 +- .../destinations/webhook/router/data.ts | 153 +- .../destinations/woopra/router/data.ts | 138 +- .../destinations/wootric/router/data.ts | 3005 ++- .../destinations/yahoo_dsp/router/data.ts | 17 +- .../destinations/zendesk/router/data.ts | 80 +- test/integrations/testUtils.ts | 290 + test/testHelper.js | 64 +- 303 files changed, 22649 insertions(+), 104535 deletions(-) create mode 100644 .github/workflows/component-test-report.yml create mode 100644 src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json create mode 100644 src/v0/destinations/tiktok_ads/transformV2.js delete mode 100644 test/__mocks__/data/salesforce/proxy_response.json delete mode 100644 test/__mocks__/data/salesforce/response.json delete mode 100644 test/__tests__/adobe_analytics.test.js delete mode 100644 test/__tests__/appsFlyer.test.js delete mode 100644 test/__tests__/data/adobe_analytics.json delete mode 100644 test/__tests__/data/af_input.json delete mode 100644 test/__tests__/data/af_output.json delete mode 100644 test/__tests__/data/af_router_input.json delete mode 100644 test/__tests__/data/af_router_output.json delete mode 100644 test/__tests__/data/criteo_audience_proxy_input.json delete mode 100644 test/__tests__/data/criteo_audience_proxy_output.json delete mode 100644 test/__tests__/data/criteo_audience_router_rETL_input.json delete mode 100644 test/__tests__/data/criteo_audience_router_rETL_output.json delete mode 100644 test/__tests__/data/dcm_floodlight_cdk_output.json delete mode 100644 test/__tests__/data/dcm_floodlight_input.json delete mode 100644 test/__tests__/data/dcm_floodlight_output.json delete mode 100644 test/__tests__/data/dynamic_yield.json delete mode 100644 test/__tests__/data/eloqua.json delete mode 100644 test/__tests__/data/facebook_pixel_proxy_input.json delete mode 100644 test/__tests__/data/facebook_pixel_proxy_output.json delete mode 100644 test/__tests__/data/fb_proxy_input.json delete mode 100644 test/__tests__/data/fb_proxy_output.json delete mode 100644 test/__tests__/data/fullstory.json delete mode 100644 test/__tests__/data/heap_cdk_output.json delete mode 100644 test/__tests__/data/kafka_batch_input.json delete mode 100644 test/__tests__/data/kafka_batch_output.json delete mode 100644 test/__tests__/data/kochava_cdk_output.json delete mode 100644 test/__tests__/data/kochava_input.json delete mode 100644 test/__tests__/data/kochava_output.json delete mode 100644 test/__tests__/data/lambda.json delete mode 100644 test/__tests__/data/lambda_router_input.json delete mode 100644 test/__tests__/data/lambda_router_output.json delete mode 100644 test/__tests__/data/launchdarkly_audience.json delete mode 100644 test/__tests__/data/leanplum_input.json delete mode 100644 test/__tests__/data/leanplum_output.json delete mode 100644 test/__tests__/data/leanplum_router_input.json delete mode 100644 test/__tests__/data/leanplum_router_output.json delete mode 100644 test/__tests__/data/lemnisk.json delete mode 100644 test/__tests__/data/lemnisk_router.json delete mode 100644 test/__tests__/data/lytics_cdk_output.json delete mode 100644 test/__tests__/data/lytics_input.json delete mode 100644 test/__tests__/data/lytics_output.json delete mode 100644 test/__tests__/data/lytics_router_input.json delete mode 100644 test/__tests__/data/lytics_router_output.json delete mode 100644 test/__tests__/data/mailjet.json delete mode 100644 test/__tests__/data/mailjet_batch.json delete mode 100644 test/__tests__/data/mailjet_router.json delete mode 100644 test/__tests__/data/mailmodo.json delete mode 100644 test/__tests__/data/mailmodo_router_input.json delete mode 100644 test/__tests__/data/mailmodo_router_output.json delete mode 100644 test/__tests__/data/moengage_input.json delete mode 100644 test/__tests__/data/moengage_output.json delete mode 100644 test/__tests__/data/moengage_router_input.json delete mode 100644 test/__tests__/data/moengage_router_output.json delete mode 100644 test/__tests__/data/monetate_input.json delete mode 100644 test/__tests__/data/monetate_output.json delete mode 100644 test/__tests__/data/monetate_router_input.json delete mode 100644 test/__tests__/data/monetate_router_output.json delete mode 100644 test/__tests__/data/new_relic_cdk_output.json delete mode 100644 test/__tests__/data/new_relic_input.json delete mode 100644 test/__tests__/data/new_relic_output.json delete mode 100644 test/__tests__/data/ometria_batch_input.json delete mode 100644 test/__tests__/data/ometria_batch_output.json delete mode 100644 test/__tests__/data/ometria_input.json delete mode 100644 test/__tests__/data/ometria_output.json delete mode 100644 test/__tests__/data/one_signal.json delete mode 100644 test/__tests__/data/one_signal_router_input.json delete mode 100644 test/__tests__/data/one_signal_router_output.json delete mode 100644 test/__tests__/data/pagerduty.json delete mode 100644 test/__tests__/data/pagerduty_router.json delete mode 100644 test/__tests__/data/pardot_router_input.json delete mode 100644 test/__tests__/data/pardot_router_output.json delete mode 100644 test/__tests__/data/personalize_input.json delete mode 100644 test/__tests__/data/personalize_output.json delete mode 100644 test/__tests__/data/rockerbox.json delete mode 100644 test/__tests__/data/rockerbox_router_input.json delete mode 100644 test/__tests__/data/rockerbox_router_output.json delete mode 100644 test/__tests__/data/sendgrid.json delete mode 100644 test/__tests__/data/sendgrid_batch.json delete mode 100644 test/__tests__/data/sendgrid_router.json delete mode 100644 test/__tests__/data/sfmc_input.json delete mode 100644 test/__tests__/data/sfmc_output.json delete mode 100644 test/__tests__/data/sfmc_router_input.json delete mode 100644 test/__tests__/data/sfmc_router_output.json delete mode 100644 test/__tests__/data/snapchat_custom_audience_proxy_input.json delete mode 100644 test/__tests__/data/snapchat_custom_audience_proxy_output.json delete mode 100644 test/__tests__/data/tiktok_ads_offline_events_router_input.json delete mode 100644 test/__tests__/data/tiktok_ads_offline_events_router_output.json delete mode 100644 test/__tests__/data/tiktok_ads_proxy_input.json delete mode 100644 test/__tests__/data/tiktok_ads_proxy_output.json delete mode 100644 test/__tests__/data/userlist_cdk_output.json delete mode 100644 test/__tests__/data/userlist_input.json delete mode 100644 test/__tests__/data/userlist_output.json delete mode 100644 test/__tests__/data/userlist_router_input.json delete mode 100644 test/__tests__/data/userlist_router_output.json delete mode 100644 test/__tests__/data/vitally_cdk_output.json delete mode 100644 test/__tests__/data/vitally_input.json delete mode 100644 test/__tests__/data/vitally_output.json delete mode 100644 test/__tests__/data/webhook_input.json delete mode 100644 test/__tests__/data/webhook_output.json delete mode 100644 test/__tests__/data/webhook_router_input.json delete mode 100644 test/__tests__/data/webhook_router_output.json delete mode 100644 test/__tests__/data/woopra.json delete mode 100644 test/__tests__/data/zapier_cdk_output.json delete mode 100644 test/__tests__/data/zapier_input.json delete mode 100644 test/__tests__/dcm_floodlight-cdk.test.ts delete mode 100644 test/__tests__/dcm_floodlight.test.js delete mode 100644 test/__tests__/dynamic_yield-cdk.test.ts delete mode 100644 test/__tests__/eloqua-cdk.test.ts delete mode 100644 test/__tests__/fullstory-cdk.test.ts delete mode 100644 test/__tests__/kochava-cdk.test.ts delete mode 100644 test/__tests__/kochava.test.js delete mode 100644 test/__tests__/lambda.test.js delete mode 100644 test/__tests__/launchdarkly_audience-cdk.test.ts delete mode 100644 test/__tests__/leanplum.test.js delete mode 100644 test/__tests__/lemniskMarketingAutomation.test.js delete mode 100644 test/__tests__/lytics-cdk.test.ts delete mode 100644 test/__tests__/lytics.test.js delete mode 100644 test/__tests__/mailjet.test.js delete mode 100644 test/__tests__/mailmodo.test.js delete mode 100644 test/__tests__/moengage.test.js delete mode 100644 test/__tests__/monetate.test.js delete mode 100644 test/__tests__/new_relic-cdk.test.ts delete mode 100644 test/__tests__/new_relic.test.js delete mode 100644 test/__tests__/ometria.test.js delete mode 100644 test/__tests__/one_signal.test.js delete mode 100644 test/__tests__/pagerduty.test.js delete mode 100644 test/__tests__/personalize.test.js delete mode 100644 test/__tests__/rockerbox.test.js delete mode 100644 test/__tests__/sendgrid.test.js delete mode 100644 test/__tests__/sfmc.test.js delete mode 100644 test/__tests__/userlist-cdk.test.ts delete mode 100644 test/__tests__/userlist.test.js delete mode 100644 test/__tests__/vitally-cdk.test.ts delete mode 100644 test/__tests__/vitally.test.js delete mode 100644 test/__tests__/webhook-cdk.test.ts delete mode 100644 test/__tests__/zapier-cdk.test.ts delete mode 100644 test/deleteUsers/data/iterable/handler_input.json delete mode 100644 test/deleteUsers/data/iterable/handler_output.json delete mode 100644 test/deleteUsers/data/iterable/nw_client_data.json create mode 100644 test/integrations/destinations/klaviyo/processor/ecomTestData.ts create mode 100644 test/integrations/destinations/klaviyo/processor/groupTestData.ts create mode 100644 test/integrations/destinations/klaviyo/processor/identifyTestData.ts create mode 100644 test/integrations/destinations/klaviyo/processor/screenTestData.ts create mode 100644 test/integrations/destinations/klaviyo/processor/trackTestData.ts create mode 100644 test/integrations/destinations/klaviyo/processor/validationTestData.ts create mode 100644 test/integrations/destinations/sfmc/network.ts create mode 100644 test/integrations/destinations/sfmc/processor/data.ts create mode 100644 test/integrations/destinations/sfmc/router/data.ts create mode 100644 test/integrations/destinations/tiktok_ads/mocks.ts create mode 100644 test/integrations/destinations/userlist/router/data.ts diff --git a/.github/workflows/component-test-report.yml b/.github/workflows/component-test-report.yml new file mode 100644 index 0000000000..9904004417 --- /dev/null +++ b/.github/workflows/component-test-report.yml @@ -0,0 +1,68 @@ +name: Component Test Reporter + +on: + pull_request: + types: + - opened + - reopened + - synchronize + +permissions: + id-token: write # allows the JWT to be requested from GitHub's OIDC provider + contents: read # This is required for actions/checkout + +jobs: + test_and_upload: + runs-on: ubuntu-latest + + steps: + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::${{ secrets.AWS_DEV_ACCOUNT_ID }}:role/${{ secrets.AWS_DEV_S3_SYNC_ROLE }} + aws-region: us-east-1 + + - name: Checkout + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 1 + + - name: Setup Node + uses: actions/setup-node@v4.0.1 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - name: Install Dependencies + run: npm ci + + - name: Run Tests and Generate Report + run: | + npm run test:ts -- component + + + - name: Uplaod Report to S3 + run: | + aws s3 cp ./test_reports/ s3://test-integrations-dev/integrations-test-reports/rudder-transformer/${{ github.event.number }}/ --recursive + + + - name: Comment on PR with S3 Object URL + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.PAT }} + script: | + const { owner, repo } = context.repo; + // Get the pull request number + const prNumber = context.payload.pull_request.number; + const commentBody = `Test report for this run is available at: https://test-integrations-dev.s3.amazonaws.com/integrations-test-reports/rudder-transformer/${prNumber}/test-report.html`; + + + // Comment on the pull request + github.rest.issues.createComment({ + owner, + repo, + issue_number: prNumber, + body: commentBody + }); + + \ No newline at end of file diff --git a/.github/workflows/prepare-for-dev-deploy.yml b/.github/workflows/prepare-for-dev-deploy.yml index cf97772e2e..9eb705aa52 100644 --- a/.github/workflows/prepare-for-dev-deploy.yml +++ b/.github/workflows/prepare-for-dev-deploy.yml @@ -14,7 +14,7 @@ jobs: report-coverage: name: Report Code Coverage if: github.event_name == 'push' - uses: ./.github/workflows/report-code-coverage.yml + uses: ./.github/workflows/dt-test-and-report-code-coverage.yml secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.github/workflows/prepare-for-prod-dt-deploy.yml b/.github/workflows/prepare-for-prod-dt-deploy.yml index 9669e1bc2c..2af853f643 100644 --- a/.github/workflows/prepare-for-prod-dt-deploy.yml +++ b/.github/workflows/prepare-for-prod-dt-deploy.yml @@ -14,7 +14,7 @@ jobs: report-coverage: name: Report Code Coverage if: github.event_name == 'push' - uses: ./.github/workflows/report-code-coverage.yml + uses: ./.github/workflows/dt-test-and-report-code-coverage.yml secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.github/workflows/prepare-for-prod-ut-deploy.yml b/.github/workflows/prepare-for-prod-ut-deploy.yml index ea5928f3b2..c2900d61da 100644 --- a/.github/workflows/prepare-for-prod-ut-deploy.yml +++ b/.github/workflows/prepare-for-prod-ut-deploy.yml @@ -14,7 +14,7 @@ jobs: report-coverage: name: Report Code Coverage if: github.event_name == 'push' - uses: ./.github/workflows/report-code-coverage.yml + uses: ./.github/workflows/dt-test-and-report-code-coverage.yml secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.github/workflows/ut-tests.yml b/.github/workflows/ut-tests.yml index 530a532325..30c29ceaee 100644 --- a/.github/workflows/ut-tests.yml +++ b/.github/workflows/ut-tests.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Go - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5.0.0 with: go-version: 1.17 diff --git a/.gitignore b/.gitignore index 24d37f6354..f96c3ac807 100644 --- a/.gitignore +++ b/.gitignore @@ -134,4 +134,7 @@ dist **/.DS_Store -.idea \ No newline at end of file +.idea + +# component test report +test_reports/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9aa1ff6beb..0dab3e6b21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,38 @@ 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.54.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.54.0...v1.54.1) (2024-01-24) + + +### Bug Fixes + +* remove brand mapping from products to contents in tiktok_ads ([49c4988](https://github.com/rudderlabs/rudder-transformer/commit/49c4988cc872f40780fa640240c209c3d768fab4)) + +## [1.54.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.53.0...v1.54.0) (2024-01-22) + + +### Features + +* add regulation to features.json ([2ae4378](https://github.com/rudderlabs/rudder-transformer/commit/2ae437820952b87dace289ec04d5c116d77cf70c)) +* add regulation to features.json ([#2988](https://github.com/rudderlabs/rudder-transformer/issues/2988)) ([65c79a8](https://github.com/rudderlabs/rudder-transformer/commit/65c79a8fd02218cee5d12e51004cdc023a0e7989)) +* onboard new tiktok version events 2.0 ([#2961](https://github.com/rudderlabs/rudder-transformer/issues/2961)) ([0fca088](https://github.com/rudderlabs/rudder-transformer/commit/0fca088980368954e9a82addedd6a4544035259a)) + + +### Bug Fixes + +* add valid code coverage file in workflows ([#3000](https://github.com/rudderlabs/rudder-transformer/issues/3000)) ([34bf49d](https://github.com/rudderlabs/rudder-transformer/commit/34bf49d19f33326008a467230574e4f1c78e9ddb)) +* error handling for trade desk first party data flow ([#2986](https://github.com/rudderlabs/rudder-transformer/issues/2986)) ([32c9c03](https://github.com/rudderlabs/rudder-transformer/commit/32c9c038ca96477cbe8d94d2a19679817b952e4c)) +* fixing network and default error messages for marketo bulk upload ([#3016](https://github.com/rudderlabs/rudder-transformer/issues/3016)) ([3741073](https://github.com/rudderlabs/rudder-transformer/commit/3741073ea37e83aa1e6e35c3ccb26d5a41a49617)) +* klaviyo validate event name to be string before accessing it ([#2998](https://github.com/rudderlabs/rudder-transformer/issues/2998)) ([7aa6687](https://github.com/rudderlabs/rudder-transformer/commit/7aa6687829783df3924a89698a53b9cb315449eb)) +* mailjet source operating on array instead object ([#2999](https://github.com/rudderlabs/rudder-transformer/issues/2999)) ([0dbb307](https://github.com/rudderlabs/rudder-transformer/commit/0dbb307bf5d18893e3331cd92bc16bae1b4a6add)) +* mixpanel alias simplified merge error message ([#2996](https://github.com/rudderlabs/rudder-transformer/issues/2996)) ([e53b304](https://github.com/rudderlabs/rudder-transformer/commit/e53b3046252bb5abcae046445baf4a67c40f37a3)) +* optimise build and coverage ([#2985](https://github.com/rudderlabs/rudder-transformer/issues/2985)) ([81ab6e8](https://github.com/rudderlabs/rudder-transformer/commit/81ab6e86070a9992141bad405c6f52d1ab186f11)) +* ortto remove phn:phone field if no phone is there in payload ([#2997](https://github.com/rudderlabs/rudder-transformer/issues/2997)) ([0c2f7bc](https://github.com/rudderlabs/rudder-transformer/commit/0c2f7bcbf705787087a8d9073145e282851ddb6f)) +* pr conflicts in back merge ([#2984](https://github.com/rudderlabs/rudder-transformer/issues/2984)) ([f16066c](https://github.com/rudderlabs/rudder-transformer/commit/f16066cc8f867378f1b9bb9812f8efe389ca5bc8)) +* **slack:** add support of blank space in handlebar ([#2959](https://github.com/rudderlabs/rudder-transformer/issues/2959)) ([ff12d8f](https://github.com/rudderlabs/rudder-transformer/commit/ff12d8ffddccbdac934c7cbac03730cd2593147f)) +* tiktok add missing field brand ([#2942](https://github.com/rudderlabs/rudder-transformer/issues/2942)) ([ca76297](https://github.com/rudderlabs/rudder-transformer/commit/ca76297147f0a2c12d68d97dda95b9a44efe4020)) +* tiktok_ads remove page.url as a required field ([#3006](https://github.com/rudderlabs/rudder-transformer/issues/3006)) ([595f819](https://github.com/rudderlabs/rudder-transformer/commit/595f81982a2604ec08621e15cea7c16564d5ecab)) + ## [1.53.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.52.4...v1.53.0) (2024-01-08) diff --git a/package-lock.json b/package-lock.json index 36ea9a1b52..1c40b23fba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.53.0", + "version": "1.54.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.53.0", + "version": "1.54.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", @@ -65,7 +65,7 @@ "stacktrace-parser": "^0.1.10", "statsd-client": "^0.4.7", "truncate-utf8-bytes": "^1.0.2", - "ua-parser-js": "^1.0.35", + "ua-parser-js": "^1.0.37", "unset-value": "^2.0.1", "uuid": "^9.0.0", "valid-url": "^1.0.9" diff --git a/package.json b/package.json index 112099b918..43aa0d9890 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.53.0", + "version": "1.54.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { @@ -110,7 +110,7 @@ "stacktrace-parser": "^0.1.10", "statsd-client": "^0.4.7", "truncate-utf8-bytes": "^1.0.2", - "ua-parser-js": "^1.0.35", + "ua-parser-js": "^1.0.37", "unset-value": "^2.0.1", "uuid": "^9.0.0", "valid-url": "^1.0.9" diff --git a/src/cdk/v2/destinations/ortto/procWorkflow.yaml b/src/cdk/v2/destinations/ortto/procWorkflow.yaml index 4b98f6246f..dfd7118c41 100644 --- a/src/cdk/v2/destinations/ortto/procWorkflow.yaml +++ b/src/cdk/v2/destinations/ortto/procWorkflow.yaml @@ -34,6 +34,7 @@ steps: description: | Builds common fields in destination payload. template: | + let phone = .message.().({{{{$.getGenericPaths("phone")}}}}); let commonFields = .message.().({ "fields": { "str::first": {{{{$.getGenericPaths("firstName")}}}}, @@ -46,7 +47,7 @@ steps: "dtz::b": $.getBirthdayObj({{{{$.getGenericPaths("birthday")}}}}), "str::ei": {{{{$.getGenericPaths("userId")}}}}, "str::language": .context.traits.language || .context.locale, - "phn::phone": {"n": {{{{$.getGenericPaths("phone")}}}}}, + "phn::phone": phone ? {"n": phone}, "bol::gdpr": .context.traits.gdpr ?? true, "bol::p": .context.traits.emailConsent || false, "bol::sp": .context.traits.smsConsent || false, diff --git a/src/cdk/v2/destinations/the_trade_desk/utils.js b/src/cdk/v2/destinations/the_trade_desk/utils.js index 0f1c3fb0c1..632442d74e 100644 --- a/src/cdk/v2/destinations/the_trade_desk/utils.js +++ b/src/cdk/v2/destinations/the_trade_desk/utils.js @@ -8,6 +8,7 @@ const { getSuccessRespEvents, removeUndefinedAndNullValues, handleRtTfSingleEventError, + isEmptyObject, } = require('../../../../v0/util'); const tradeDeskConfig = require('./config'); @@ -59,34 +60,44 @@ const processRecordInputs = (inputs, destination) => { const successMetadata = []; const errorResponseList = []; - const error = new InstrumentationError('Invalid action type'); + const invalidActionTypeError = new InstrumentationError('Invalid action type'); + const emptyFieldsError = new InstrumentationError('Fields cannot be empty'); inputs.forEach((input) => { const { fields, action } = input.message; const isInsertOrDelete = action === 'insert' || action === 'delete'; - if (isInsertOrDelete) { - successMetadata.push(input.metadata); - const data = [ - { - Name: Config.audienceId, - TTLInMinutes: action === 'insert' ? ttlInMin(Config.ttlInDays) : 0, - }, - ]; - - Object.keys(fields).forEach((id) => { - const value = fields[id]; - if (value) { - // adding only non empty ID's - items.push({ [id]: value, Data: data }); - } - }); - } else { - errorResponseList.push(handleRtTfSingleEventError(input, error, {})); + if (!isInsertOrDelete) { + errorResponseList.push(handleRtTfSingleEventError(input, invalidActionTypeError, {})); + return; } + + if (isEmptyObject(fields)) { + errorResponseList.push(handleRtTfSingleEventError(input, emptyFieldsError, {})); + return; + } + + successMetadata.push(input.metadata); + const data = [ + { + Name: Config.audienceId, + TTLInMinutes: action === 'insert' ? ttlInMin(Config.ttlInDays) : 0, + }, + ]; + + Object.keys(fields).forEach((id) => { + const value = fields[id]; + if (value) { + // adding only non empty ID's + items.push({ [id]: value, Data: data }); + } + }); }); const payloads = batchResponseBuilder(items, Config); + if (payloads.length === 0) { + return errorResponseList; + } const response = getSuccessRespEvents(payloads, successMetadata, destination, true); return [response, ...errorResponseList]; diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index 9273b6a048..3c2f8137f2 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -156,6 +156,9 @@ const trackRequestHandler = (message, category, destination) => { const payload = {}; const { privateApiKey, flattenProperties } = destination.Config; let event = get(message, 'event'); + if (event && typeof event !== 'string') { + throw new InstrumentationError('Event type should be a string'); + } event = event ? event.trim().toLowerCase() : event; let attributes = {}; if (ecomEvents.includes(event) && message.properties) { diff --git a/src/v0/destinations/marketo_bulk_upload/fileUpload.js b/src/v0/destinations/marketo_bulk_upload/fileUpload.js index c7212ff9cb..4c1679cbfc 100644 --- a/src/v0/destinations/marketo_bulk_upload/fileUpload.js +++ b/src/v0/destinations/marketo_bulk_upload/fileUpload.js @@ -206,8 +206,8 @@ const getImportID = async (input, config, accessToken, csvHeader) => { 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'), + `Unable to upload file due to error : ${resp.response}`, + hydrateStatusForServer(resp.status, 'During uploading file'), ); } return handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime, config); diff --git a/src/v0/destinations/marketo_bulk_upload/poll.js b/src/v0/destinations/marketo_bulk_upload/poll.js index 3ad458c545..97211c4763 100644 --- a/src/v0/destinations/marketo_bulk_upload/poll.js +++ b/src/v0/destinations/marketo_bulk_upload/poll.js @@ -34,7 +34,7 @@ const getPollStatus = async (event) => { state: 'Retryable', }); throw new NetworkError( - 'Could not poll status', + `Could not poll status: due to error ${pollStatus.response}`, hydrateStatusForServer(pollStatus.status, 'During fetching poll status'), ); } diff --git a/src/v0/destinations/marketo_bulk_upload/util.js b/src/v0/destinations/marketo_bulk_upload/util.js index 7b329a3441..9661b0e4cb 100644 --- a/src/v0/destinations/marketo_bulk_upload/util.js +++ b/src/v0/destinations/marketo_bulk_upload/util.js @@ -153,7 +153,7 @@ const getAccessToken = async (config) => // sample response : {response: '[ENOTFOUND] :: DNS lookup failed', status: 400} if (!isHttpStatusSuccess(accessTokenResponse.status)) { throw new NetworkError( - 'Could not retrieve authorisation token', + `Could not retrieve authorisation token due to error ${accessTokenResponse}`, hydrateStatusForServer(accessTokenResponse.status, FETCH_ACCESS_TOKEN), { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(accessTokenResponse.status), @@ -172,7 +172,7 @@ const getAccessToken = async (config) => // when access token is present if (accessTokenResponse.response.access_token) { - /* This scenario will handle the case when we get the foloowing response + /* This scenario will handle the case when we get the following 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. @@ -185,7 +185,10 @@ const getAccessToken = async (config) => } return accessTokenResponse.response.access_token; } - throw new AbortedError('Could not retrieve authorisation token', 400); + throw new AbortedError( + `Could not retrieve authorisation token due to error ${accessTokenResponse}`, + 400, + ); }); /** @@ -254,14 +257,18 @@ const handleFetchJobStatusResponse = (resp, type) => { if (!isHttpStatusSuccess(marketoReposnseStatus)) { logger.info('[Network Error]:Failed during fetching job status', { marketoResponse, type }); throw new NetworkError( - 'Unable to fetch job status', + `Unable to fetch job status: due to error ${marketoResponse}`, hydrateStatusForServer(marketoReposnseStatus, 'During fetching job status'), ); } 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); + throw new RetryableError( + `Failure during fetching job status due to error : ${marketoResponse}`, + 500, + resp, + ); } /* @@ -394,7 +401,11 @@ const getFieldSchemaMap = async (accessToken, munchkinId) => { fieldMap[field?.name] = field?.dataType; }); } else { - throw new RetryableError('Failed to fetch Marketo Field Schema', 500, fieldSchemaMapping); + throw new RetryableError( + `Failed to fetch Marketo Field Schema due to error ${fieldSchemaMapping}`, + 500, + fieldSchemaMapping, + ); } return fieldMap; }; diff --git a/src/v0/destinations/mp/transform.js b/src/v0/destinations/mp/transform.js index 3d0aaa7c4c..0cfedafafb 100644 --- a/src/v0/destinations/mp/transform.js +++ b/src/v0/destinations/mp/transform.js @@ -441,7 +441,9 @@ const processSingleMessage = (message, destination) => { return processIdentifyEvents(clonedMessage, clonedMessage.type, destination); case EventType.ALIAS: if (destination.Config?.identityMergeApi === 'simplified') { - throw new InstrumentationError('Alias call is deprecated in `Simplified ID merge`'); + throw new InstrumentationError( + 'The use of the alias call in the context of the `Simplified ID merge` feature is not supported anymore.', + ); } return processAliasEvents(message, message.type, destination); case EventType.GROUP: diff --git a/src/v0/destinations/slack/util.js b/src/v0/destinations/slack/util.js index 658ffe4d37..f5d407018b 100644 --- a/src/v0/destinations/slack/util.js +++ b/src/v0/destinations/slack/util.js @@ -80,12 +80,12 @@ const buildDefaultTraitTemplate = (traitsList, traits, template) => { let generatedStringFromTemplate = template; // build template with whitelisted traits traitsList.forEach((trait) => { - generatedStringFromTemplate += `${trait}: {{${trait}}} `; + generatedStringFromTemplate += `${trait}: {{"${trait}"}} `; }); // else with all traits if (traitsList.length === 0) { Object.keys(traits).forEach((traitKey) => { - generatedStringFromTemplate += `${traitKey}: {{${traitKey}}} `; + generatedStringFromTemplate += `${traitKey}: {{"${traitKey}"}} `; }); } return generatedStringFromTemplate; diff --git a/src/v0/destinations/tiktok_ads/config.js b/src/v0/destinations/tiktok_ads/config.js index 641b2e0865..61009d4c31 100644 --- a/src/v0/destinations/tiktok_ads/config.js +++ b/src/v0/destinations/tiktok_ads/config.js @@ -9,6 +9,10 @@ const ConfigCategory = { type: 'track', name: 'TikTokTrack', }, + TRACK_V2: { + type: 'track', + name: 'TikTokTrackV2', + }, }; const PARTNER_NAME = 'RudderStack'; @@ -32,12 +36,18 @@ const eventNameMapping = { const mappingConfig = getMappingConfig(ConfigCategory, __dirname); +// tiktok docs for max batch size for events 2.0: https://business-api.tiktok.com/portal/docs?id=1771100779668482 +const maxBatchSizeV2 = 1000; +const trackEndpointV2 = 'https://business-api.tiktok.com/open_api/v1.3/event/track/'; module.exports = { TRACK_ENDPOINT, BATCH_ENDPOINT, MAX_BATCH_SIZE, PARTNER_NAME, trackMapping: mappingConfig[ConfigCategory.TRACK.name], + trackMappingV2: mappingConfig[ConfigCategory.TRACK_V2.name], eventNameMapping, DESTINATION: 'TIKTOK_ADS', + trackEndpointV2, + maxBatchSizeV2, }; diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json index cc5f4886e0..62688b7952 100644 --- a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json +++ b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json @@ -42,6 +42,22 @@ "type": "toString" } }, + { + "destKey": "properties.shop_id", + "sourceKeys": ["properties.shop_id", "properties.shopId"], + "required": false, + "metadata": { + "type": "toString" + } + }, + { + "destKey": "properties.order_id", + "sourceKeys": ["properties.order_id", "properties.orderId"], + "required": false, + "metadata": { + "type": "toString" + } + }, { "destKey": "properties.content_type", "sourceKeys": ["properties.contentType", "properties.content_type"], diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json b/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json new file mode 100644 index 0000000000..530d6e392a --- /dev/null +++ b/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json @@ -0,0 +1,133 @@ +[ + { + "destKey": "event_id", + "sourceKeys": ["properties.eventId", "properties.event_id", "messageId"], + "required": false + }, + { + "destKey": "event_time", + "sourceKeys": "timestamp", + "sourceFromGenericMap": true, + "required": true, + "metadata": { + "type": "secondTimestamp" + } + }, + { + "destKey": "limited_data_use", + "sourceKeys": "properties.limited_data_use", + "required": false + }, + { + "destKey": "properties.contents", + "sourceKeys": "properties.contents", + "required": false + }, + { + "destKey": "properties.content_type", + "sourceKeys": ["properties.contentType", "properties.content_type"], + "metadata": { + "defaultValue": "product" + } + }, + { + "destKey": "properties.shop_id", + "sourceKeys": ["properties.shop_id", "properties.shopId"], + "required": false, + "metadata": { + "type": "toString" + } + }, + { + "destKey": "properties.order_id", + "sourceKeys": ["properties.order_id", "properties.orderId"], + "required": false, + "metadata": { + "type": "toString" + } + }, + { + "destKey": "properties.currency", + "sourceKeys": "properties.currency", + "required": false + }, + { + "destKey": "properties.value", + "sourceKeys": "properties.value", + "required": false + }, + { + "destKey": "properties.description", + "sourceKeys": "properties.description", + "required": false + }, + { + "destKey": "properties.query", + "sourceKeys": "properties.query", + "required": false + }, + { + "destKey": "page.url", + "sourceKeys": ["properties.context.page.url", "properties.url", "context.page.url"], + "required": false + }, + { + "destKey": "page.referrer", + "sourceKeys": [ + "properties.context.page.referrer", + "properties.referrer", + "context.page.referrer" + ], + "required": false + }, + { + "destKey": "user.locale", + "sourceKeys": ["properties.context.user.locale", "context.locale"], + "required": false + }, + { + "destKey": "user.ttclid", + "sourceKeys": "properties.ttclid", + "required": false + }, + { + "destKey": "user.ttp", + "sourceKeys": ["properties.context.user.ttp", "properties.ttp"], + "required": false + }, + { + "destKey": "user.email", + "sourceKeys": [ + "properties.context.user.email", + "context.user.email", + "traits.email", + "context.traits.email", + "properties.email" + ], + "metadata": { + "type": ["trim", "toLower"] + }, + "required": false + }, + { + "destKey": "user.phone", + "sourceKeys": [ + "properties.context.user.phone", + "traits.phone", + "context.traits.phone", + "properties.phone" + ], + "sourceFromGenericMap": false, + "required": false + }, + { + "destKey": "user.ip", + "sourceKeys": ["properties.context.user.ip", "context.ip", "request_ip"], + "required": false + }, + { + "destKey": "user.user_agent", + "sourceKeys": ["properties.context.user.userAgent", "context.userAgent"], + "required": false + } +] diff --git a/src/v0/destinations/tiktok_ads/transform.js b/src/v0/destinations/tiktok_ads/transform.js index 91e2189170..bdf3a0defe 100644 --- a/src/v0/destinations/tiktok_ads/transform.js +++ b/src/v0/destinations/tiktok_ads/transform.js @@ -21,6 +21,7 @@ const { handleRtTfSingleEventError, batchMultiplexedEvents, } = require('../../util'); +const { process: processV2, processRouterDest: processRouterDestV2 } = require('./transformV2'); const { getContents } = require('./util'); const { trackMapping, @@ -165,7 +166,9 @@ const trackResponseBuilder = async (message, { Config }) => { const process = async (event) => { const { message, destination } = event; - + if (destination.Config?.version === 'v2') { + return processV2(event); + } if (!destination.Config.accessToken) { throw new ConfigurationError('Access Token not found. Aborting '); } @@ -240,6 +243,11 @@ function getEventChunks(event, trackResponseList, eventsChunk) { } const processRouterDest = async (inputs, reqMetadata) => { + const { destination } = inputs[0]; + const { Config } = destination; + if (Config?.version === 'v2') { + return processRouterDestV2(inputs, reqMetadata); + } const errorRespEvents = checkInvalidRtTfEvents(inputs); if (errorRespEvents.length > 0) { return errorRespEvents; diff --git a/src/v0/destinations/tiktok_ads/transformV2.js b/src/v0/destinations/tiktok_ads/transformV2.js new file mode 100644 index 0000000000..91078dfe65 --- /dev/null +++ b/src/v0/destinations/tiktok_ads/transformV2.js @@ -0,0 +1,738 @@ +/* eslint-disable camelcase */ +/* eslint-disable @typescript-eslint/naming-convention */ +const set = require('set-value'); +const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib'); +const { EventType } = require('../../../constants'); +const { + constructPayload, + defaultRequestConfig, + defaultPostRequestConfig, + removeUndefinedAndNullValues, + defaultBatchRequestConfig, + getSuccessRespEvents, + isDefinedAndNotNullAndNotEmpty, + getDestinationExternalID, + getHashFromArrayWithDuplicate, + checkInvalidRtTfEvents, + handleRtTfSingleEventError, +} = require('../../util'); +const { getContents, hashUserField } = require('./util'); +const config = require('./config'); + +const { trackMappingV2, trackEndpointV2, eventNameMapping, PARTNER_NAME } = config; +const { JSON_MIME_TYPE } = require('../../util/constant'); + +/** + * Generated track payload for an event using TikTokTrackV2.json config mapping, + * hashing user properties and + * defining contents from products + * @param {*} message + * @param {*} Config + * @param {*} event + * @returns track payload + */ +const getTrackResponsePayload = (message, destConfig, event) => { + const payload = constructPayload(message, trackMappingV2); + + // if contents is not an array converting it into array + if (payload.properties?.contents && !Array.isArray(payload.properties.contents)) { + payload.properties.contents = [payload.properties.contents]; + } + + // if contents is not present but we have properties.products present which has fields with superset of contents fields + if (payload.properties && !payload.properties.contents && message.properties.products) { + // retreiving data from products only when contents is not present + payload.properties.contents = getContents(message, false); + } + + // getting externalId and hashing it and storing it in + const externalId = getDestinationExternalID(message, 'tiktokExternalId'); + if (isDefinedAndNotNullAndNotEmpty(externalId)) { + set(payload, 'user.external_id', externalId); + } + if (destConfig.hashUserProperties && isDefinedAndNotNullAndNotEmpty(payload.user)) { + payload.user = hashUserField(payload.user); + } + payload.event = event; + // add partner name and return payload + return removeUndefinedAndNullValues(payload); +}; + +const trackResponseBuilder = async (message, { Config }) => { + const { eventsToStandard, sendCustomEvents, accessToken, pixelCode } = Config; + + let event = message.event?.toLowerCase().trim(); + if (!event) { + throw new InstrumentationError('Event name is required'); + } + + const standardEventsMap = getHashFromArrayWithDuplicate(eventsToStandard); + + if (!sendCustomEvents && eventNameMapping[event] === undefined && !standardEventsMap[event]) { + throw new InstrumentationError( + `Event name (${event}) is not valid, must be mapped to one of standard events`, + ); + } + const response = defaultRequestConfig(); + response.headers = { + 'Access-Token': accessToken, + 'Content-Type': JSON_MIME_TYPE, + }; + // tiktok doc for request: https://business-api.tiktok.com/portal/docs?id=1771100865818625 + response.method = defaultPostRequestConfig.requestMethod; + response.endpoint = trackEndpointV2; + const responseList = []; + if (standardEventsMap[event]) { + Object.keys(standardEventsMap).forEach((key) => { + if (key === event) { + standardEventsMap[event].forEach((eventName) => { + responseList.push(getTrackResponsePayload(message, Config, eventName)); + }); + } + }); + } else { + /* + For custom event we do not want to lower case the event or trim it we just want to send those as it is + Doc https://ads.tiktok.com/help/article/standard-events-parameters?lang=en + */ + event = eventNameMapping[event] || message.event; + // if there exists no event mapping we will build payload with custom event recieved + responseList.push(getTrackResponsePayload(message, Config, event)); + } + // set event source and event_source_id + response.body.JSON = { + event_source: 'web', + event_source_id: pixelCode, + partner_name: PARTNER_NAME, + test_event_code: message.properties?.testEventCode, + }; + response.body.JSON.data = responseList; + return response; +}; + +const process = async (event) => { + const { message, destination } = event; + + if (!destination.Config.accessToken) { + throw new ConfigurationError('Access Token not found. Aborting'); + } + + if (!destination.Config.pixelCode) { + throw new ConfigurationError('Pixel Code not found. Aborting'); + } + + if (!message.type) { + throw new InstrumentationError('Event type is required'); + } + + const messageType = message.type.toLowerCase(); + + let response; + if (messageType === EventType.TRACK) { + response = await trackResponseBuilder(message, destination); + } else { + throw new InstrumentationError(`Event type ${messageType} is not supported`); + } + return response; +}; + +/** + * it builds batch response for an event using defaultBatchRequestConfig() utility + * @param {*} eventsChunk + * @returns batchedRequest + * + * Example: + * inputEvent: + *{ + event: { + event_source_id: "dummyPixelCode", + event_source: "web", + partner_name: "RudderStack", + data: [ + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + referrer: "http://demo.mywebsite.com", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id5", + }, + event: "CompletePayment", + partner_name: "RudderStack", + }, + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id1", + }, + event: "CompletePayment", + partner_name: "RudderStack", + } + ], + }, + metadata: [ + { + jobId: 5, + }, + { + jobId: 1, + } + ], + destination: { + Config: { + accessToken: "dummyAccessToken", + pixelCode: "dummyPixelCode", + hashUserProperties: false, + version: "v2", + }, + }, +} + * returns: + * + { + version: "1", + type: "REST", + method: "POST", + endpoint: "https://business-api.tiktok.com/open_api/v1.3/event/track/", + headers: { + "Access-Token": "dummyAccessToken", + "Content-Type": "application/json", + }, + params: { + }, + body: { + JSON: { + event_source_id: "asdfg", + event_source: "web", + partner_name: "RudderStack", + data: [ + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + referrer: "http://demo.mywebsite.com", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id5", + }, + event: "CompletePayment", + }, + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id1", + }, + event: "CompletePayment", + } + ], + }, + JSON_ARRAY: { + }, + XML: { + }, + FORM: { + }, + }, + files: { + }, +} + */ +const buildBatchResponseForEvent = (inputEvent) => { + const { destination, event } = inputEvent; + const { accessToken } = destination.Config; + const { batchedRequest } = defaultBatchRequestConfig(); + batchedRequest.body.JSON = event; + batchedRequest.endpoint = trackEndpointV2; + batchedRequest.headers = { + 'Access-Token': accessToken, + 'Content-Type': 'application/json', + }; + return batchedRequest; +}; + +const getEventChunks = (event, trackResponseList, eventsChunk) => { + // only for already transformed payload + // eslint-disable-next-line no-param-reassign + event.message = Array.isArray(event.message) ? event.message : [event.message]; + + // not performing batching for test events as it is not supported + if (event.message[0].body.JSON.test_event_code) { + const { metadata, destination, message } = event; + trackResponseList.push(getSuccessRespEvents(message, [metadata], destination)); + } else { + eventsChunk.push({ ...event }); + } +}; + +/** + * This clubs eventsChunk request body and metadat based upon maxBatchSize + * @param {*} eventsChunk + * @param {*} maxBatchSize + * @returns array of objects as + * { + * event, // Batched Event + * metadata, // metadata of all the requests combined to form above event + * destination, // destination object + * } + * + * Example: + * + * eventsChunk:[ + { + message: [ + { + version: "1", + type: "REST", + method: "POST", + endpoint: "https://business-api.tiktok.com/open_api/v1.3/event/track/", + headers: { + "Access-Token": "dummyAccessToken", + "Content-Type": "application/json", + }, + params: { + }, + body: { + JSON: { + event_source: "web", + event_source_id: "pixel_code", + data: [ + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + referrer: "http://demo.mywebsite.com", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id5", + }, + event: "CompletePayment", + partner_name: "RudderStack", + }, + ], + }, + JSON_ARRAY: { + }, + XML: { + }, + FORM: { + }, + }, + files: { + }, + }, + ], + metadata: { + jobId: 5, + }, + destination: { + Config: { + accessToken: "dummyAccessToken", + pixelCode: "pixel_code", + hashUserProperties: false, + version: "v2", + }, + }, + }, + { + message: [ + { + version: "1", + type: "REST", + method: "POST", + endpoint: "https://business-api.tiktok.com/open_api/v1.3/event/track/", + headers: { + "Access-Token": "dummyAccessToken", + "Content-Type": "application/json", + }, + params: { + }, + body: { + JSON: { + event_source: "web", + event_source_id: "pixel_code", + data: [ + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id1", + }, + event: "CompletePayment", + partner_name: "RudderStack", + }, + ], + }, + JSON_ARRAY: { + }, + XML: { + }, + FORM: { + }, + }, + files: { + }, + }, + ], + metadata: { + jobId: 1, + }, + destination: { + Config: { + accessToken: "dummyAccessToken", + pixelCode: "pixel_code", + hashUserProperties: false, + version: "v2", + }, + }, + } +] + * maxBatchSize = 1000 + +Returns +[ + { + event: { + event_source_id: "dummyPixelCode", + event_source: "web", + partner_name: "RudderStack", + data: [ + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + referrer: "http://demo.mywebsite.com", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id5", + }, + event: "CompletePayment", + partner_name: "RudderStack", + }, + { + event_id: "1616318632825_357", + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: "socks", + content_id: "1077218", + }, + { + price: 30, + quantity: 1, + content_type: "dress", + content_id: "1197218", + }, + ], + content_type: "product", + currency: "USD", + value: 46, + }, + page: { + url: "http://demo.mywebsite.com/purchase", + }, + user: { + locale: "en-US", + email: "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", + phone: "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", + ip: "13.57.97.131", + user_agent: "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion", + external_id: "id1", + }, + event: "CompletePayment", + partner_name: "RudderStack", + } + ], + }, + metadata: [ + { + jobId: 5, + }, + { + jobId: 1, + } + ], + destination: { + Config: { + accessToken: "dummyAccessToken", + pixelCode: "dummyPixelCode", + hashUserProperties: false, + version: "v2", + }, + }, + } +] + */ +const batchEvents = (eventsChunk) => { + const events = []; + let data = []; + let metadata = []; + const { destination } = eventsChunk[0]; + const { pixelCode } = destination.Config; + eventsChunk.forEach((event) => { + const eventData = event.message[0]?.body.JSON.data; + // eslint-disable-next-line unicorn/consistent-destructuring + if (Array.isArray(eventData) && eventData?.length > config.maxBatchSizeV2 - data.length) { + // Partner name must be added above "data": [..]; + events.push({ + event: { + event_source_id: pixelCode, + event_source: 'web', + partner_name: PARTNER_NAME, + data: [...data], + }, + metadata: [...metadata], + destination, + }); + data = []; + metadata = []; + } + data.push(...eventData); + metadata.push(event.metadata); + }); + // Partner name must be added above "data": [..]; + events.push({ + event: { + event_source_id: pixelCode, + event_source: 'web', + partner_name: PARTNER_NAME, + data: [...data], + }, + metadata: [...metadata], + destination, + }); + return events; +}; +const processRouterDest = async (inputs, reqMetadata) => { + const errorRespEvents = checkInvalidRtTfEvents(inputs); + if (errorRespEvents.length > 0) { + return errorRespEvents; + } + const trackResponseList = []; // list containing single track event in batched format + const eventsChunk = []; // temporary variable to divide payload into chunks + const errorRespList = []; + await Promise.all( + inputs.map(async (event) => { + try { + if (event.message.statusCode) { + // already transformed event + getEventChunks(event, trackResponseList, eventsChunk); + } else { + // if not transformed + getEventChunks( + { + message: await process(event), + metadata: event.metadata, + destination: event.destination, + }, + trackResponseList, + eventsChunk, + ); + } + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata); + errorRespList.push(errRespEvent); + } + }), + ); + + const batchedResponseList = []; + if (eventsChunk.length > 0) { + const batchedEvents = batchEvents(eventsChunk); + batchedEvents.forEach((batch) => { + const batchedRequest = buildBatchResponseForEvent(batch); + batchedResponseList.push( + getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, true), + ); + }); + } + return [...batchedResponseList.concat(trackResponseList), ...errorRespList]; +}; + +module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/tiktok_ads/util.js b/src/v0/destinations/tiktok_ads/util.js index dbc8b344fc..3d86ac69b7 100644 --- a/src/v0/destinations/tiktok_ads/util.js +++ b/src/v0/destinations/tiktok_ads/util.js @@ -1,11 +1,12 @@ -const { removeUndefinedAndNullValues } = require('../../util'); +const { removeUndefinedAndNullValues, hashToSha256 } = require('../../util'); /** * Prepare contents array from products array * @param {*} message + * @param {*} getContentType if true contents.$.content_type is mapped otherwise not * @returns */ -const getContents = (message) => { +const getContents = (message, getContentType = true) => { const contents = []; const { properties } = message; // eslint-disable-next-line @typescript-eslint/naming-convention @@ -13,20 +14,49 @@ const getContents = (message) => { if (products && Array.isArray(products) && products.length > 0) { products.forEach((product) => { const singleProduct = { - content_type: - product.contentType || contentType || product.content_type || content_type || 'product', + content_type: getContentType + ? product.contentType || contentType || product.contentType || content_type || 'product' + : undefined, content_id: String(product.product_id), content_category: product.category, content_name: product.name, price: product.price, quantity: product.quantity, description: product.description, - brand: product.brand }; contents.push(removeUndefinedAndNullValues(singleProduct)); }); } return contents; }; - -module.exports = { getContents }; +const hashString = (input) => hashToSha256(input.toString().trim()); +/* + * Hashing user related detail i.e external_id, email, phone_number + */ +const hashUserField = (user) => { + const updatedUser = { ...user }; + // hashing external_id + const { email, phone, external_id: externalId } = user; + if (externalId) { + // if there are multiple externalId's in form of array that tiktok supports then hashing every + if (Array.isArray(externalId)) { + updatedUser.external_id = externalId.map((extId) => hashString(extId).toString()); + } else { + updatedUser.external_id = hashString(externalId).toString(); + } + } + // hashing email + if (email && email.length > 0) { + updatedUser.email = hashString(email).toString(); + } + // hashing phone + if (phone && phone.length > 0) { + if (Array.isArray(phone)) { + updatedUser.phone = phone.map((num) => hashString(num).toString()); + } else { + updatedUser.phone = hashString(phone).toString(); + } + } + return updatedUser; +}; +module.exports = { getContents, hashUserField }; diff --git a/src/v0/destinations/tiktok_ads/util.test.js b/src/v0/destinations/tiktok_ads/util.test.js index 5a5cc2c505..1649b94eeb 100644 --- a/src/v0/destinations/tiktok_ads/util.test.js +++ b/src/v0/destinations/tiktok_ads/util.test.js @@ -1,4 +1,4 @@ -const { getContents } = require('./util'); +const { getContents, hashUserField } = require('./util'); describe('getContents utility test', () => { it('product id sent as number', () => { @@ -95,3 +95,80 @@ describe('getContents utility test', () => { expect(expectedOutput).toEqual(getContents(message)); }); }); + +describe('hashUserField utility test', () => { + it('should return the updated user object with hashed fields', () => { + const user = { + external_id: 123, + email: 'test@example.com', + phone: '+1234567890', + }; + + const hashedUser = hashUserField(user); + + expect(hashedUser).toEqual({ + external_id: 'a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3', + email: '973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b', + phone: '422ce82c6fc1724ac878042f7d055653ab5e983d186e616826a72d4384b68af8', + }); + }); + it('should hash external_id, email and phone fields when they are defined and not null or empty', () => { + const user = { + external_id: '123', + email: 'test@example.com', + phone: '+1234567890', + }; + + const hashedUser = hashUserField(user); + + expect(hashedUser.external_id).toBeDefined(); + expect(hashedUser.email).toBeDefined(); + expect(hashedUser.phone).toBeDefined(); + }); + + it('should hash external_id field even if it contains multiple values in form of array', () => { + const user = { + external_id: ['123', '456', '789'], + phone: ['+1234130697', '+e211134234'], + }; + + const hashedUser = hashUserField(user); + + expect(Array.isArray(hashedUser.external_id)).toBe(true); + expect(hashedUser.external_id.length).toBe(user.external_id.length); + hashedUser.external_id.forEach((hashedId, index) => { + expect(hashedId).toBeDefined(); + expect(hashedId).not.toBe(user.external_id[index]); + }); + hashedUser.phone.forEach((hashedId, index) => { + expect(hashedId).toBeDefined(); + expect(hashedId).not.toBe(user.phone[index]); + }); + }); + + it('should not hash external_id, email or phone fields when they are undefined, null or empty', () => { + const user = { + external_id: undefined, + email: null, + phone: '', + }; + + const hashedUser = hashUserField(user); + + expect(hashedUser.external_id).toBeUndefined(); + expect(hashedUser.email).toBeNull(); + expect(hashedUser.phone).toBe(''); + }); + + it('should not modify the original user object', () => { + const user = { + external_id: '123', + email: 'test@example.com', + phone: '1234567890', + }; + + const hashedUser = hashUserField(user); + + expect(hashedUser).not.toBe(user); + }); +}); diff --git a/src/v0/sources/mailjet/transform.js b/src/v0/sources/mailjet/transform.js index d2719cc0ba..91f90b6ed0 100644 --- a/src/v0/sources/mailjet/transform.js +++ b/src/v0/sources/mailjet/transform.js @@ -2,21 +2,18 @@ const path = require('path'); const fs = require('fs'); const md5 = require('md5'); const Message = require('../message'); +const { CommonUtils } = require('../../../util/common'); // ref : https://dev.mailjet.com/email/guides/webhooks/ // 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 process(event) { +const processEvent = (event) => { const message = new Message(`MailJet`); - // event type is always track const eventType = 'track'; - message.setEventType(eventType); - message.setEventName(event.event); - message.setPropertiesV2(event, mapping); if (event.time) { @@ -46,6 +43,12 @@ function process(event) { message.userId = md5(event.email); } return message; -} +}; + +// This fucntion just converts the incoming payload to array of already not and sends it to processEvent +const process = (events) => { + const eventsArray = CommonUtils.toArray(events); + return eventsArray.map(processEvent); +}; module.exports = { process }; diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 34182a7685..5433529b5e 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -2165,6 +2165,7 @@ module.exports = { getValueFromPropertiesOrTraits, getValuesAsArrayFromConfig, handleSourceKeysOperation, + hashToSha256, isAppleFamily, isBlank, isCdkDestination, diff --git a/test/__mocks__/data/salesforce/proxy_response.json b/test/__mocks__/data/salesforce/proxy_response.json deleted file mode 100644 index a92edc58c2..0000000000 --- a/test/__mocks__/data/salesforce/proxy_response.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "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": { - "statusText": "No Content" - }, - "status": 204 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/3": { - "response": { - "data": [ - { - "message": "Session expired or invalid", - "errorCode": "INVALID_SESSION_ID" - } - ], - "status": 401 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/2": { - "response": { - "data": [ - { - "message": "INVALID_HEADER_TYPE", - "errorCode": "INVALID_AUTH_HEADER" - } - ], - "status": 401 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/4": { - "response": { - "data": [ - { - "message": "Request limit exceeded", - "errorCode": "REQUEST_LIMIT_EXCEEDED" - } - ], - "status": 403 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/5": { - "response": { - "data": [ - { - "message": "Server Unavailable", - "errorCode": "SERVER_UNAVAILABLE" - } - ], - "status": 503 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/6": { - "response": { - "data": { - "error": "invalid_grant", - "error_description": "authentication failure" - }, - "status": 400 - } - }, - "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/7": { - "response": { - "data": { - "message": "Server Unavailable", - "errorCode": "SERVER_UNAVAILABLE" - }, - "status": 503 - } - }, - "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": [ - { - "attributes": { - "type": "object_name", - "url": "/services/data/v50.0/sobjects/object_name/a0J75100002w97gEAA" - }, - "Id": "a0J75100002w97gEAA", - "External_ID__c": "external_id" - }, - { - "attributes": { - "type": "object_name", - "url": "/services/data/v50.0/sobjects/object_name/a0J75200002w9ZsEAI" - }, - "Id": "a0J75200002w9ZsEAI", - "External_ID__c": "external_id TEST" - } - ] - }, - "status": 200 - } -} diff --git a/test/__mocks__/data/salesforce/response.json b/test/__mocks__/data/salesforce/response.json deleted file mode 100644 index de18da7656..0000000000 --- a/test/__mocks__/data/salesforce/response.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "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", - "token_type": "Bearer", - "issued_at": "1582343657644", - "signature": "XRgUHXVBSWhLHZVoVFZby/idWXdAPA5lMW/ZdLMzB8o=" - }, - "https://ap15.salesforce.com/services/data/v50.0/parameterizedSearch/?q=peter.gibbons%40initech.com&sobject=Lead&Lead.fields=id": { - "searchRecords": [] - }, - "https://ap15.salesforce.com/services/data/v50.0/parameterizedSearch/?q=peter.gibbons1%40initech.com&sobject=Lead&Lead.fields=id": { - "searchRecords": [ - { - "attributes": { - "type": "Lead", - "url": "/services/data/v50.0/sobjects/Lead/leadId" - }, - "Id": "leadId" - } - ] - }, - "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", - "token_type": "Bearer", - "issued_at": "1582343657644", - "signature": "XRgUHXVBSWhLHZVoVFZby/idWXdAPA5lMW/ZdLMzB8o=", - "abc": "123" - }, - "https://ap15.salesforce.com/services/data/v50.0/parameterizedSearch/?q=peter.gibbons%40initech.com&sobject=Lead&Lead.fields=id,IsConverted,ConvertedContactId,IsDeleted": { - "searchRecords": [] - }, - "https://ap15.salesforce.com/services/data/v50.0/parameterizedSearch/?q=ddv_ua%2B%7B%7B1234*245%7D%7D%40bugFix.com&sobject=Lead&Lead.fields=id,IsConverted,ConvertedContactId,IsDeleted": { - "searchRecords": [ - { - "attributes": { - "type": "Lead", - "url": "/services/data/v50.0/sobjects/Lead/leadId" - }, - "Id": "leadId" - } - ] - } -} diff --git a/test/__tests__/adobe_analytics.test.js b/test/__tests__/adobe_analytics.test.js deleted file mode 100644 index 287ac37981..0000000000 --- a/test/__tests__/adobe_analytics.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "adobe_analytics"; -const name = "Adobe Analytics"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/destinations/${integration}/transform`); -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}.json`) -); -const testData = JSON.parse(testDataFile); - - -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); - } - }); - }); - }); -}); - diff --git a/test/__tests__/appsFlyer.test.js b/test/__tests__/appsFlyer.test.js deleted file mode 100644 index 3a15f6232b..0000000000 --- a/test/__tests__/appsFlyer.test.js +++ /dev/null @@ -1,7 +0,0 @@ -const { - getDestFromTestFile, - executeTransformationTest -} = require("./utilities/test-utils"); - -executeTransformationTest("af", "processor"); -executeTransformationTest("af", "router"); diff --git a/test/__tests__/data/adobe_analytics.json b/test/__tests__/data/adobe_analytics.json deleted file mode 100644 index 6361f92640..0000000000 --- a/test/__tests__/data/adobe_analytics.json +++ /dev/null @@ -1,4764 +0,0 @@ -[ - { - "description": "[ECom]: Product Viewed", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1", - "name": "Best Seller" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": { - "tt01": "t01", - "tt02": "t02" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "product viewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "currency": "USD", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "currencyMerch": 25, - "addressMerch": "Delhi", - "currencyProdMerch": "USD", - "addressProdMerch": "SF", - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze90R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2", - "overridePageView": true - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "https://flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "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+bestsellert01t02roottval001Kolkata9935400932RudderLabs JavaScript SDKr15,faze90Rciaz,hummer,tharhttps://www.estore.com/best-seller/1Best Sellercustompropval1custompropval22020-01-09T10:01:53.558Zmktcloudid001prodViewGames;Game;11;148.39footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "[ECom]: Product Added", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": {}, - "event": "product added", - "integrations": { - "All": true - }, - "properties": { - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "overridePageView": false - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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+bestsellerRudderLabs JavaScript SDKoproduct addedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001scAddGames;Game;11;148.39footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "[ECom]: Product Removed", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": {}, - "event": "product removed", - "integrations": { - "All": true - }, - "properties": { - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "overridePageView": true - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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+bestsellerRudderLabs JavaScript SDKhttps://www.estore.com/best-seller/1https://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001scRemoveGames;Game;11;148.39footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "[ECom]: Cart Viewed", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "cart viewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "cart_id": "12345", - - "products": [ - { - "product_id": "123", - "sku": "G-14", - "name": "Cards", - "price": 14.99, - "position": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "G-32", - "name": "UNO", - "price": 3.99, - "position": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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 SDKocart viewedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001scViewGames;Cards;1;14.99,Games;UNO;1;3.99footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "[ECom]: Checkout started", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "checkout started", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "affiliation": "Apple Store", - "value": 20, - "revenue": 15.0, - "shipping": 4, - "tax": 1, - "discount": 1.5, - "coupon": "ImagePro", - "currency": "USD", - "purchaseId": "p101", - "products": [ - { - "product_id": "123", - "sku": "G-32", - "name": "Monopoly", - "price": 14, - "quantity": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "F-32", - "name": "UNO", - "price": 3.45, - "quantity": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "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": {} - }, - "files": {} - } - }, - { - "description": "[ECom]: Order Completed", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "order completed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "checkout_id": "12345", - "order_id": "1234", - "affiliation": "Apple Store", - "total": 20, - "revenue": 15.0, - "shipping": 4, - "tax": 1, - "discount": 1.5, - "coupon": "ImagePro", - "currency": "USD", - "products": [ - { - "product_id": "123", - "sku": "G-32", - "name": "Monopoly", - "price": 14, - "quantity": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "F-32", - "name": "UNO", - "price": 3.45, - "quantity": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "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 SDKoorder completedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001purchaseGames;Monopoly;1;14.00,Games;UNO;2;6.90footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Cart Opened", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "cart opened", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "cart_id": "12345", - "products": [ - { - "product_id": "123", - "sku": "G-14", - "name": "Cards", - "price": 14.99, - "position": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "G-32", - "name": "UNO", - "price": 3.99, - "position": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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 SDKocart openedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001scOpenGames;Cards;1;14.99,Games;UNO;1;3.99footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "[Custom] Watched Video", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "Watched Video", - "integrations": { - "All": true - }, - "properties": { - "plan": "growth", - "video": "TEDxGROWTH" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - }, - { - "from": "video", - "to": "2" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "Watched Video", - "to": "event1" - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - }, - { - "from": "plan", - "to": "2", - "delimiter": "," - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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 SDKTEDxGROWTHoWatched Videohttps://www.estore.com/best-seller/1growth2020-01-09T10:01:53.558Zmktcloudid001event1footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Common Page Call", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "integrations": { - "All": true - }, - "properties": { - "browser": "chrome", - "searchTerm": "swim shorts", - "section": "swimwear", - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze90R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "name": "Page View", - "type": "page", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "Page View", - "to": "event2" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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+bestsellerroottval001Kolkata9935400932RudderLabs JavaScript SDKopage viewhttps://www.estore.com/best-seller/1r15,faze90Rciaz,hummer,tharcustompropval1custompropval22020-01-09T10:01:53.558Zmktcloudid001event2footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Currency test event", - "input": { - "message": { - "type": "track", - "event": "Currency test event", - "userId": "ruddersampleX3", - "request_ip": "14.5.67.21", - "context": { - "app": { - "build": "1", - "name": "RudderAndroidClient", - "namespace": "com.rudderstack.demo.android", - "version": "1.0" - }, - "device": { - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "android", - "advertisingId": "8ecd7512-2864-440c-93f3-a3cabe62525b", - "attStatus": true, - "id": "fc8d449516de0dfb", - "adTrackingEnabled": true, - "token": "bk3RNwTe3H0CI2k_ HHwgIpoDKCIZvvD MExUdFQ3P1" - }, - "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" - }, - "os": { - "name": "Android", - "version": "9" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080 - }, - "timezone": "Asia/Mumbai", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "properties": { - "products": [ - { - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "currency": "USD", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "prodLevelCurrency": "EUR" - } - ], - "currencyProdMerch": 5, - "currencyMerch": 21, - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze90R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2", - "mark6": "label number 6", - "overridePageView": true - }, - "timestamp": "2021-09-01T15:46:51.000Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - }, - { - "from": "video", - "to": "2" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "watched video", - "to": "event1" - }, - { - "from": "Page View", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - }, - { - "from": "plan", - "to": "2", - "delimiter": "," - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "1794108014.5.67.21en-USAsia/MumbaiDalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)Kolkata9935400932com.rudderstack.android.sdk.corer15,faze90Rciaz,hummer,tharundefinedcustompropval1custompropval22021-09-01T15:46:51.000Zmktcloudid001event6,event6=21,event2,event6Games;Game;11;148.39;event6=5|event6=EUR;eVar4=9935400932|eVar5=Kolkata|eVar6=label number 6footlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Override feature test", - "input": { - "message": { - "anonymousId": "73c53c25-42h1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "overridePageView": true, - "tsUrl": "footlocker.sc.omtrdc.net", - "overrideProductString": ";product1;;;event1=1", - "overrideEventString": "scAdd", - "overrideEvars": { - "evar1": "yash", - "evar2": "val2" - }, - "overrideLists": { - "list1": "r15,faze90R" - }, - "overrideCustomProperties": { - "prop1": "overrideVal1" - }, - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "currency": "USD", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "currencyMerch": "INR", - "addressMerch": "Delhi", - "currencyProdMerch": "USD", - "addressProdMerch": "SF", - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze91R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2", - "hier1": "h1", - "hier2": "h2" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - }, - { - "from": "video", - "to": "2" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "watched video", - "to": "event1" - }, - { - "from": "Page View", - "to": "event2" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "hierMapping": [ - { - "from": "hier1", - "to": "1" - }, - { - "from": "hier2", - "to": "2" - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - }, - { - "from": "plan", - "to": "2", - "delimiter": "," - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "XML": { - "payload": "17941080sales campaignwebUSDen-USDalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)https://www.google.com/search?q=estore+bestselleryashval2h1h2r15,faze90Rhttps://www.estore.com/best-seller/1https://www.estore.com/best-seller/1overrideVal12020-01-09T10:01:53.558Zmktcloudid001scAdd;product1;;;event1=1footlockerrudderstackpoc" - }, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "files": {} - } - }, - { - "description": "Override hiers test", - "input": { - "message": { - "anonymousId": "73c53c25-42h1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "tsUrl": "footlocker.sc.omtrdc.net", - "overrideProductString": ";product1;;;event1=1", - "overrideEventString": "scAdd", - "overrideEvars": { - "evar1": "yash", - "evar2": "val2" - }, - "overrideLists": { - "list1": "r15,faze90R" - }, - "overrideCustomProperties": { - "prop1": "overrideVal1" - }, - "overrideHiers": { - "hier1": "oh1", - "hier2": "oh2", - "hier3": "newh3" - }, - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "currency": "USD", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "currencyMerch": "INR", - "addressMerch": "Delhi", - "currencyProdMerch": "USD", - "addressProdMerch": "SF", - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze91R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2", - "hier1": "h1", - "hier2": "h2", - "pageName": "hierarchy test" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - }, - { - "from": "video", - "to": "2" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "watched video", - "to": "event1" - }, - { - "from": "Page View", - "to": "event2" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "hierMapping": [ - { - "from": "hier1", - "to": "1" - }, - { - "from": "hier2", - "to": "2" - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - }, - { - "from": "plan", - "to": "2", - "delimiter": "," - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "XML": { - "payload": "17941080sales campaignwebUSDen-USDalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)https://www.google.com/search?q=estore+bestselleryashval2oProduct Viewedhttps://www.estore.com/best-seller/1oh1oh2newh3r15,faze90RoverrideVal12020-01-09T10:01:53.558Zmktcloudid001scAdd;product1;;;event1=1footlockerrudderstackpoc" - }, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "files": {} - } - }, - { - "description": "product level eVaR", - "input": { - "message": { - "anonymousId": "73c53c25-42h1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "tsUrl": "footlocker.sc.omtrdc.net", - "overrideProductString": ";product1;;;event1=1", - "overrideEventString": "scAdd", - "overrideEvars": { - "evar1": "yash", - "evar2": "val2" - }, - "overrideLists": { - "list1": "r15,faze90R" - }, - "overrideCustomProperties": { - "prop1": "overrideVal1" - }, - "overrideHiers": { - "hier1": "oh1", - "hier2": "oh2", - "hier3": "newh3" - }, - "product_id": "123", - "sku": "F15", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 13.49, - "quantity": 11, - "coupon": "DISC21", - "currency": "USD", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png", - "currencyMerch": "INR", - "addressMerch": "Delhi", - "currencyProdMerch": "USD", - "addressProdMerch": "SF", - "city5": "Kolkata", - "phone4": "9935400932", - "bikelist": "r15,faze91R", - "carlist": "ciaz,hummer,thar", - "customprop1": "custompropval1", - "customprop2": "custompropval2", - "hier1": "h1", - "hier2": "h2", - "pageName": "hierarchy test", - "mark6": "label mark" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - }, - { - "from": "video", - "to": "2" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "watched video", - "to": "event1" - }, - { - "from": "Page View", - "to": "event2" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "hierMapping": [ - { - "from": "hier1", - "to": "1" - }, - { - "from": "hier2", - "to": "2" - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - }, - { - "from": "plan", - "to": "2", - "delimiter": "," - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "XML": { - "payload": "17941080sales campaignwebUSDen-USDalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)https://www.google.com/search?q=estore+bestselleryashval2oProduct Viewedhttps://www.estore.com/best-seller/1oh1oh2newh3r15,faze90RoverrideVal12020-01-09T10:01:53.558Zmktcloudid001scAdd;product1;;;event1=1footlockerrudderstackpoc" - }, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "files": {} - } - }, - { - "description": "[ERROR]: Invalid message type: Identify", - "input": { - "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 - } - }, - "user_properties": { - "prop1": "val1", - "prop2": "val2" - }, - "type": "identify", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "userId": "user001", - "anonymousId": "anony001", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - }, - "statusCode": 400, - "error": "Message type is not supported", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "ADOBE_ANALYTICS", - "module": "destination", - "implementation": "native", - "feature": "processor" - } - } - }, - { - "description": "[ERROR]: Message Type is not present.", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "currency test event", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "cart_id": "12345", - "mark6": "label number 6", - "products": [ - { - "product_id": "123", - "sku": "G-14", - "name": "Cards", - "price": 14.99, - "position": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "G-32", - "name": "UNO", - "price": 3.99, - "position": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - }, - "statusCode": 400, - "error": "Message Type is not present. Aborting message.", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "ADOBE_ANALYTICS", - "module": "destination", - "implementation": "native", - "feature": "processor" - } - } - }, - { - "description": "[ERROR]: The event is not a supported ECOM event or a mapped custom event.", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "random unmapped event", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "cart_id": "12345", - "mark6": "label number 6", - "products": [ - { - "product_id": "123", - "sku": "G-14", - "name": "Cards", - "price": 14.99, - "position": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "G-32", - "name": "UNO", - "price": 3.99, - "position": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - }, - "statusCode": 400, - "error": "The event is not a supported ECOM event or a mapped custom event. Aborting.", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "configuration", - "destType": "ADOBE_ANALYTICS", - "module": "destination", - "implementation": "native", - "feature": "processor" - } - } - }, - { - "description": "Test overrideEventName property", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "ip": "127.0.0.1", - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "traits": {}, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "traits": { - "roott01": "roottval001" - }, - "event": "random unmapped event", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "overrideEventName": "override event", - "cart_id": "12345", - "mark6": "label number 6", - "products": [ - { - "product_id": "123", - "sku": "G-14", - "name": "Cards", - "price": 14.99, - "position": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "G-32", - "name": "UNO", - "price": 3.99, - "position": 2, - "category": "Games" - } - ] - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "Config": { - "trackingServerUrl": "flk.gc.gmtidc.net", - "trackingServerSecureUrl": "flk.gc.gmtidc.net", - "reportSuiteIds": "footlockerrudderstackpoc", - "sslHeartbeat": true, - "heartbeatTrackingServerUrl": "", - "useUtf8Charset": true, - "useSecureServerSide": true, - "proxyNormalUrl": "", - "proxyHeartbeatUrl": "", - "marketingCloudOrgId": "mktcloudid001", - "dropVisitorId": false, - "timestampOption": "enabled", - "timestampOptionalReporting": true, - "noFallbackVisitorId": false, - "preferVisitorId": false, - "trackPageName": true, - "contextDataPrefix": "", - "useLegacyLinkName": true, - "pageNameFallbackTostring": true, - "sendFalseValues": true, - "productIdentifier": "name", - "eventFilteringOption": "disable", - "eventsToTypes": [ - { - "from": "init heartbeat", - "to": "initHeartbeat" - } - ], - "rudderEventsToAdobeEvents": [ - { - "from": "product viewed", - "to": "event1" - }, - { - "from": "currency test event", - "to": "event6" - } - ], - "contextDataMapping": [ - { - "from": "tt01", - "to": "tt01" - }, - { - "from": "tt02", - "to": "tt02" - }, - { - "from": "roott01", - "to": "roott01" - } - ], - "eVarMapping": [ - { - "from": "city5", - "to": "5" - }, - { - "from": "phone4", - "to": "4" - }, - { - "to": "6", - "from": "context.library.name" - } - ], - "listMapping": [ - { - "from": "bikelist", - "to": "1", - "delimiter": "," - }, - { - "from": "carlist", - "to": "2", - "delimiter": "," - } - ], - "customPropsMapping": [ - { - "from": "customprop1", - "to": "1", - "delimiter": "," - }, - { - "from": "customprop2", - "to": "2", - "delimiter": "," - } - ], - "eventMerchEventToAdobeEvent": [ - { - "from": "product not viewed", - "to": "event1" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "eventMerchProperties": [ - { - "eventMerchProperties": "currencyMerch" - }, - { - "eventMerchProperties": "addressMerch" - } - ], - "productMerchEventToAdobeEvent": [ - { - "from": "product list viewed", - "to": "event2" - }, - { - "from": "Currency test event", - "to": "event6" - } - ], - "productMerchProperties": [ - { - "productMerchProperties": "currencyProdMerch" - }, - { - "productMerchProperties": "addressProdMerch" - }, - { - "productMerchProperties": "products.prodLevelCurrency" - } - ], - "productMerchEvarsMap": [ - { - "from": "phone4", - "to": "4" - }, - { - "from": "city5", - "to": "5" - }, - { - "from": "products.mark6", - "to": "6" - } - ], - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://flk.gc.gmtidc.net/b/ss//6", - "headers": { "Content-type": "application/xml" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": { - "payload": "17941080sales campaignweb127.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 SDKorandom unmapped eventhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001override eventfootlockerrudderstackpoc" - }, - "FORM": {} - }, - "files": {} - } - } -] diff --git a/test/__tests__/data/af_input.json b/test/__tests__/data/af_input.json deleted file mode 100644 index d5e2d6f16a..0000000000 --- a/test/__tests__/data/af_input.json +++ /dev/null @@ -1,1089 +0,0 @@ -[ - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "page": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "screen": { - "density": 2 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "appId" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "track", - "messageId": "08829772-d991-427c-b976-b4c4f4430b4e", - "originalTimestamp": "2019-10-15T09:35:31.291Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "event": "test track event HS", - "properties": { - "user_actual_role": "system_admin, system_user", - "user_actual_id": 12345 - }, - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "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": "test@rudderstack.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": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "track", - "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be", - "originalTimestamp": "2019-10-14T11:15:18.300Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "event": "checkout started", - "properties": { - "currency": "CAD", - "products": [ - { - "product_id": "pr1", - "quantity": 1, - "price": 24.75, - "name": "my product", - "sku": "p-298" - }, - { - "product_id": "pr2", - "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": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "id": "some_other2345_sample_external_id", - "type": "appsflyerExternalId" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "ios", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "appleAppId": "123456789" - }, - "Enabled": true - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-08-14T05:30:30.118Z", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "source": "test", - "app": { - "namespace": "com.rudderlabs.javascript" - }, - "os": { - "name": "android" - }, - "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, - "price": 25, - "quantity": 2, - "currency": "ZAR", - "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": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "abcde", - "androidAppId": "com.rudderlabs.javascript", - "groupTypeTrait": "email", - "groupValueTrait": "age", - "trackProductsOnce": false, - "trackRevenuePerProduct": false - } - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-08-14T05:30:30.118Z", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "source": "test", - "app": { - "namespace": "com.rudderlabs.javascript" - }, - "os": { - "name": "android" - }, - "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, - "price": 25, - "quantity": 2, - "currency": "ZAR", - "discount": 2.5, - "order_id": "50314b8e9bcf000000000000", - "shipping": 3, - "subtotal": 22.5, - "affiliation": "Google Store", - "checkout_id": "fksdjfsdjfisjf9sdfjsd9f" - }, - "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "abcde", - "androidAppId": "com.rudderlabs.javascript", - "groupTypeTrait": "email", - "groupValueTrait": "age", - "trackProductsOnce": false, - "trackRevenuePerProduct": false - } - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-08-14T05:30:30.118Z", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "source": "test", - "app": { - "namespace": "com.rudderlabs.javascript" - }, - "os": { - "name": "android" - }, - "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", - "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "abcde", - "androidAppId": "com.rudderlabs.javascript", - "groupTypeTrait": "email", - "groupValueTrait": "age", - "trackProductsOnce": false, - "trackRevenuePerProduct": false - } - } - }, - { - "message": { - "type": "track", - "event": "normal track event", - "sentAt": "2020-08-14T05:30:30.118Z", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "source": "test", - "app": { - "namespace": "com.rudderlabs.javascript" - }, - "os": { - "name": "android" - }, - "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, - "price": 25, - "quantity": 2, - "currency": "ZAR", - "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": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "abcde", - "androidAppId": "com.rudderlabs.javascript", - "groupTypeTrait": "email", - "groupValueTrait": "age", - "trackProductsOnce": false, - "trackRevenuePerProduct": false - } - } - }, - { - "message": { - "type": "track", - "event": "normal track event", - "sentAt": "2020-08-14T05:30:30.118Z", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "source": "test", - "app": { - "namespace": "com.rudderlabs.javascript" - }, - "os": { - "name": "android" - }, - "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", - "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "abcde", - "androidAppId": "com.rudderlabs.javascript", - "groupTypeTrait": "email", - "groupValueTrait": "age", - "trackProductsOnce": false, - "trackRevenuePerProduct": false - } - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript", - "sharingFilter": ["hello"] - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript", - "sharingFilter": "all" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - } -] diff --git a/test/__tests__/data/af_output.json b/test/__tests__/data/af_output.json deleted file mode 100644 index 51132a5c83..0000000000 --- a/test/__tests__/data/af_output.json +++ /dev/null @@ -1,357 +0,0 @@ -[ - { - "statusCode": 400, - "error": "message type not supported" - }, - { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "params": {}, - "body": { - "JSON": { - "eventValue": "{\"properties\":{\"user_actual_role\":\"system_admin, system_user\",\"user_actual_id\":12345}}", - "eventName": "test track event HS", - "customer_user_id": "12345", - "ip": "0.0.0.0", - "os": "", - "appsflyer_id": "afUid", - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "error": "Appsflyer id is not set. Rejecting the event" - }, - { - "error": "Appsflyer id is not set. Rejecting the event" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "params": {}, - "body": { - "JSON": { - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "some_other2345_sample_external_id", - "os": "", - "ip": "0.0.0.0", - "app_version_name": "1.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/id123456789", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "abcde" - }, - "params": {}, - "body": { - "JSON": { - "bundleIdentifier": "com.rudderlabs.javascript", - "eventValue": "{\"properties\":{\"tax\":2,\"total\":27.5,\"coupon\":\"hasbros\",\"revenue\":48,\"price\":25,\"quantity\":2,\"currency\":\"ZAR\",\"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\"},\"af_revenue\":48,\"af_price\":[19,3],\"af_quantity\":[1,2],\"af_order_id\":\"50314b8e9bcf000000000000\",\"af_content_id\":[\"507f1f77bcf86cd799439011\",\"505bd76785ebb509fc183733\"]}", - "eventName": "Order Completed", - "eventCurrency": "ZAR", - "eventTime": "2020-08-14T05:30:30.118Z", - "appsflyer_id": "afUid" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "abcde" - }, - "params": {}, - "body": { - "JSON": { - "bundleIdentifier": "com.rudderlabs.javascript", - "eventValue": "{\"properties\":{\"tax\":2,\"total\":27.5,\"coupon\":\"hasbros\",\"revenue\":48,\"price\":25,\"quantity\":2,\"currency\":\"ZAR\",\"discount\":2.5,\"order_id\":\"50314b8e9bcf000000000000\",\"shipping\":3,\"subtotal\":22.5,\"affiliation\":\"Google Store\",\"checkout_id\":\"fksdjfsdjfisjf9sdfjsd9f\"},\"af_revenue\":48,\"af_price\":25,\"af_quantity\":2,\"af_order_id\":\"50314b8e9bcf000000000000\"}", - "eventName": "Order Completed", - "eventCurrency": "ZAR", - "eventTime": "2020-08-14T05:30:30.118Z", - "appsflyer_id": "afUid" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "abcde" - }, - "params": {}, - "body": { - "JSON": { - "bundleIdentifier": "com.rudderlabs.javascript", - "eventValue": "", - "eventName": "Order Completed", - "eventTime": "2020-08-14T05:30:30.118Z", - "appsflyer_id": "afUid" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "abcde" - }, - "params": {}, - "body": { - "JSON": { - "eventValue": "{\"properties\":{\"tax\":2,\"total\":27.5,\"coupon\":\"hasbros\",\"revenue\":48,\"price\":25,\"quantity\":2,\"currency\":\"ZAR\",\"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\"},\"af_revenue\":48,\"af_quantity\":2,\"af_price\":25}", - "eventName": "normal track event", - "eventTime": "2020-08-14T05:30:30.118Z", - "eventCurrency": "ZAR", - "appsflyer_id": "afUid", - "bundleIdentifier": "com.rudderlabs.javascript" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "abcde" - }, - "params": {}, - "body": { - "JSON": { - "bundleIdentifier": "com.rudderlabs.javascript", - "eventValue": "", - "eventName": "normal track event", - "eventTime": "2020-08-14T05:30:30.118Z", - "appsflyer_id": "afUid" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0", - "sharing_filter": ["hello"] - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0", - "sharing_filter": "all" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "os name is required along with the respective appId eg. (os->android & Android App Id is required) or (os->ios & Apple App Id is required)" - } -] diff --git a/test/__tests__/data/af_router_input.json b/test/__tests__/data/af_router_input.json deleted file mode 100644 index 42e63e8aa2..0000000000 --- a/test/__tests__/data/af_router_input.json +++ /dev/null @@ -1,200 +0,0 @@ -[ - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "track", - "messageId": "08829772-d991-427c-b976-b4c4f4430b4e", - "originalTimestamp": "2019-10-15T09:35:31.291Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "event": "test track event HS", - "properties": { - "user_actual_role": "system_admin, system_user", - "user_actual_id": 12345 - }, - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "externalId": [ - { - "type": "appsflyerExternalId", - "id": "afUid" - } - ], - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "integrations": { - "AF": { - "af_uid": "afUid" - } - } - }, - "metadata": { - "jobId": 3 - }, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "sharingFilter": "hey", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - } -] diff --git a/test/__tests__/data/af_router_output.json b/test/__tests__/data/af_router_output.json deleted file mode 100644 index 5719ee743f..0000000000 --- a/test/__tests__/data/af_router_output.json +++ /dev/null @@ -1,133 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "params": {}, - "method": "POST", - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"properties\":{\"user_actual_role\":\"system_admin, system_user\",\"user_actual_id\":12345}}", - "eventName": "test track event HS", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "endpoint": "https://api2.appsflyer.com/inappevent/com.rudderlabs.javascript", - "headers": { - "Content-Type": "application/json", - "authentication": "ef1d42390426e3f7c90ac78272e74344" - }, - "method": "POST", - "params": {}, - "body": { - "JSON": { - "app_version_name": "1.0.0", - "bundleIdentifier": "com.rudderlabs.javascript", - "customer_user_id": "12345", - "eventValue": "{\"path\":\"\",\"referrer\":\"\",\"search\":\"\",\"title\":\"\",\"url\":\"\"}", - "eventName": "page", - "appsflyer_id": "afUid", - "os": "", - "ip": "0.0.0.0", - "sharing_filter": "hey" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 3 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "devKey": "ef1d42390426e3f7c90ac78272e74344", - "sharingFilter": "hey", - "androidAppId": "com.rudderlabs.javascript" - }, - "Enabled": true - } - } -] diff --git a/test/__tests__/data/criteo_audience_proxy_input.json b/test/__tests__/data/criteo_audience_proxy_input.json deleted file mode 100644 index 2aa292939b..0000000000 --- a/test/__tests__/data/criteo_audience_proxy_input.json +++ /dev/null @@ -1,220 +0,0 @@ -[ - { - "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" - }, - "body": { - "JSON": { - "data": { - "type": "ContactlistAmendment", - "attributes": { - "operation": "remove", - "identifierType": "gum", - "identifiers": ["sample_gum3"], - "internalIdentifiers": false, - "gumCallerId": "329739" - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "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", - "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" - }, - "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", - "method": "PATCH", - "endpoint": "https://api.criteo.com/2022-10/audiences/34896/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", - "method": "PATCH", - "endpoint": "https://api.criteo.com/2022-10/audiences/34897/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", - "method": "PATCH", - "endpoint": "https://api.criteo.com/2022-10/audiences/34898/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", - "method": "PATCH", - "endpoint": "https://api.criteo.com/2022-10/audiences/34899/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" - } - } -] diff --git a/test/__tests__/data/criteo_audience_proxy_output.json b/test/__tests__/data/criteo_audience_proxy_output.json deleted file mode 100644 index a2d33fbb9a..0000000000 --- a/test/__tests__/data/criteo_audience_proxy_output.json +++ /dev/null @@ -1,167 +0,0 @@ -[ - { - "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "response": "", - "status": 200 - } - } - }, - { - "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, - "authErrorCategory": "REFRESH_TOKEN", - "destinationResponse": { - "errors": [ - { - "traceIdentifier": "80a1a0ba3981b04da847d05700752c77", - "type": "authorization", - "code": "authorization-token-invalid", - "instance": "/2022-10/audiences/123/contactlist", - "title": "The authorization header is invalid" - } - ] - }, - "message": "The authorization header is invalid 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": { - "message": "AudienceId is Invalid. Please Provide Valid AudienceId", - "destinationResponse": { - "response": { - "errors": [ - { - "code": "audience-invalid", - "traceIdentifier": "80a1a0ba3981b04da847d05700752c77", - "type": "authorization" - } - ] - }, - "status": 404 - }, - "statTags": { - "destType": "CRITEO_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "meta": "instrumentation", - "module": "destination" - }, - "status": 400 - } - }, - { - "output": { - "destinationResponse": { - "response": { - "errors": [ - { - "code": "audience-invalid", - "traceIdentifier": "80a1a0ba3981b04da847d05700752c77", - "type": "authorization" - } - ] - }, - "status": 503 - }, - "message": "Request Failed: during criteo_audience response transformation (Retryable)", - "statTags": { - "destType": "CRITEO_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "feature": "dataDelivery", - "implementation": "native", - "errorType": "retryable", - "module": "destination" - }, - "status": 500 - } - }, - { - "output": { - "destinationResponse": { - "response": {}, - "status": 429 - }, - "message": "Request Failed: during criteo_audience response transformation - due to Request Limit exceeded, (Throttled)", - "statTags": { - "destType": "CRITEO_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "throttled", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - }, - "status": 429 - } - }, - { - "output": { - "destinationResponse": { - "response": { - "message": "unknown error" - }, - "status": 410 - }, - "message": "Request Failed: during criteo_audience response transformation with status \"410\" due to \"{\"message\":\"unknown error\"}\", (Aborted) ", - "statTags": { - "destType": "CRITEO_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - }, - "status": 400 - } - } -] diff --git a/test/__tests__/data/criteo_audience_router_rETL_input.json b/test/__tests__/data/criteo_audience_router_rETL_input.json deleted file mode 100644 index 1f79dd5436..0000000000 --- a/test/__tests__/data/criteo_audience_router_rETL_input.json +++ /dev/null @@ -1,124 +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": { - "externalId": [ - { - "type": "CRITEO_AUDIENCE-23848494844100489", - "identifierType": "EMAIL" - } - ], - "mappedToDestination": "true", - "sources": { - "job_run_id": "cgiiurt8um7k7n5dq480", - "task_run_id": "cgiiurt8um7k7n5dq48g", - "job_id": "2MUWghI7u85n91dd1qzGyswpZan", - "version": "895/merge" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - } - }, - { - "destination": { - "Config": { - "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431", - "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg", - "audienceType": "email", - "warehouse-adAccountId": "123" - }, - "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": { - "externalId": [ - { - "type": "CRITEO_AUDIENCE-23848494844100489", - "identifierType": "EMAIL" - } - ], - "mappedToDestination": "true", - "sources": { - "job_run_id": "cgiiurt8um7k7n5dq480", - "task_run_id": "cgiiurt8um7k7n5dq48g", - "job_id": "2MUWghI7u85n91dd1qzGyswpZan", - "version": "895/merge" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - } - } -] diff --git a/test/__tests__/data/criteo_audience_router_rETL_output.json b/test/__tests__/data/criteo_audience_router_rETL_output.json deleted file mode 100644 index 0a03beb764..0000000000 --- a/test/__tests__/data/criteo_audience_router_rETL_output.json +++ /dev/null @@ -1,106 +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/23848494844100489/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", - "warehouse-adAccountId": "123", - "audienceType": "email" - }, - "ID": "iwehr83843" - } - } -] diff --git a/test/__tests__/data/dcm_floodlight_cdk_output.json b/test/__tests__/data/dcm_floodlight_cdk_output.json deleted file mode 100644 index 683e8bc791..0000000000 --- a/test/__tests__/data/dcm_floodlight_cdk_output.json +++ /dev/null @@ -1,398 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=22448662;cat=signu01;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=rudder-v2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=akash-v2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=2;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder2;u2=akash2;u3=friendlyName2;u4=name2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "advertisingId is required", - "statTags": { - "stage": "cdk", - "scope": "transformation", - "meta": "instrumentation", - "destination": "dcm_floodlight" - } - }, - { - "statusCode": 400, - "error": "track:: userAgent is required", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=3;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=3;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "track:: Conversion event not found", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=1;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=6;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=999999;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;u1=100;u2=5987", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=1;tfua=1;npa=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "COPPA: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "GDPR: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "npa: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "dc_lat: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "page:: Conversion event not found", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=22448662;cat=signu01;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=0;u2=akash2;u4=1234", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=0;u2=akash2;u4=traits-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/dcm_floodlight_input.json b/test/__tests__/data/dcm_floodlight_input.json deleted file mode 100644 index 28c1039742..0000000000 --- a/test/__tests__/data/dcm_floodlight_input.json +++ /dev/null @@ -1,3664 +0,0 @@ -[ - { - "destination": { - "Config": { - "advertiserId": "22448662", - "activityTag": "", - "groupTag": "", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "rudder2", - "to": "2" - } - ], - "eventName": "Product viewed", - "floodlightActivityTag": "signu01", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "signu01", - "floodlightGroupTag": "conv02", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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 viewed", - "properties": { - "orderId": 111, - "quantity": 2, - "revenue": 800, - "rudder1": "rudder-v1", - "rudder2": "rudder-v2" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash2", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Sign up Completed", - "properties": { - "orderId": 111, - "quantity": 2, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash2", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Order Complete", - "properties": { - "orderId": 111, - "quantity": 2, - "revenue": 800, - "rudder1": "rudder-v1", - "akash2": "akash-v2" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash2", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "quantity": 2, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash1", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - }, - { - "customVariables": [ - { - "from": "rudder2", - "to": "1" - }, - { - "from": "akash2", - "to": "2" - }, - { - "from": "friendlyName2", - "to": "3" - }, - { - "from": "name2", - "to": "4" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Purchase", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ], - "rudder2": "rudder2", - "akash2": "akash2", - "friendlyName2": "friendlyName2", - "name2": "name2" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash1", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - }, - { - "customVariables": [ - { - "from": "rudder2", - "to": "1" - }, - { - "from": "akash2", - "to": "2" - }, - { - "from": "friendlyName2", - "to": "3" - }, - { - "from": "name2", - "to": "4" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "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 - }, - "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": "Sign up Completed", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash1", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - } - }, - "event": "Sign up Completed", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "akash1" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ], - "akash1": "akash-v1" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Sample event", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "revenue": 800, - "products": [ - { - "sku": "45790-32", - "url": "https://www.example.com/product/path", - "name": "Monopoly: 3rd Edition", - "price": 19, - "category": "Games", - "quantity": 4, - "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" - } - ] - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Checkout Started", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "OrDeR complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "rudder1": "rudder-v1", - "akash1": "akash-v1" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "rudder1": "rudder-v1", - "akash1": "akash-v1" - }, - "integrations": { - "All": true, - "DCM Floodlight": {} - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "rudder1": 100, - "akash1": 5987 - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": true, - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "rudder1": "rudder-v1", - "akash1": "akash-v1" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": 1, - "GDPR": 1, - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": true, - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "Yes", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": true, - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "Yes", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": true, - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": "No" - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "Yes", - "advertisingId": "T0T0T072-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 - }, - "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": "Order complete", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": "true" - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "page", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "Yes", - "advertisingId": "T0T0T072-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 - }, - "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" - }, - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": "true" - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Viewed Sign up Completed Page", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "page", - "channel": "web", - "name": "Sign up Completed", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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" - }, - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": "true" - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "22448662", - "activityTag": "", - "groupTag": "", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "rudder2", - "to": "2" - } - ], - "eventName": "Product viewed", - "floodlightActivityTag": "signu01", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "signu01", - "floodlightGroupTag": "conv02", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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 viewed", - "properties": { - "orderId": 111, - "quantity": 2, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "rudder1", - "to": "1" - }, - { - "from": "akash1", - "to": "2" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "from": "", - "to": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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": "Purchase", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ], - "rudder2": 0, - "akash2": "akash2", - "friendlyName2": false, - "name2": "1234" - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "advertiserId": "12649566", - "activityTag": "check0", - "groupTag": "conv00", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Viewed Page", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "eventName": "Checkout Started", - "floodlightActivityTag": "", - "floodlightGroupTag": "", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ] - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "page", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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 - }, - "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" - }, - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800 - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": "true" - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - }, - { - "destination": { - "Config": { - "activityTag": "", - "advertiserId": "12649566", - "conversionEvents": [ - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Sign up Completed", - "floodlightActivityTag": "signu0", - "floodlightGroupTag": "conv01", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder1" - }, - { - "to": "2", - "from": "akash1" - } - ], - "eventName": "Order Complete", - "floodlightActivityTag": "order0", - "floodlightGroupTag": "conv000", - "salesTag": false - }, - { - "customVariables": [ - { - "to": "", - "from": "" - } - ], - "eventName": "Checkout Started", - "floodlightActivityTag": "check0", - "floodlightGroupTag": "conv00", - "salesTag": true - }, - { - "customVariables": [ - { - "to": "1", - "from": "rudder2" - }, - { - "to": "2", - "from": "akash2" - }, - { - "to": "3", - "from": "friendlyName2" - }, - { - "to": "4", - "from": "name2" - } - ], - "eventName": "Purchase", - "floodlightActivityTag": "Pur0", - "floodlightGroupTag": "conv111", - "salesTag": false - } - ], - "groupTag": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - }, - "message": { - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "userId": "1234", - "type": "track", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "adTrackingEnabled": "true", - "advertisingId": "T0T0T072-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, - "brand": "Google2" - }, - "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": { - "name2": "traits-v1" - }, - "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": "Purchase", - "properties": { - "orderId": 111, - "quantity": 999999, - "revenue": 800, - "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" - } - ], - "rudder2": "0", - "akash2": "akash2", - "friendlyName2": false - }, - "integrations": { - "All": true, - "DCM Floodlight": { - "COPPA": "false", - "GDPR": "1", - "npa": true - } - }, - "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f", - "originalTimestamp": "2020-01-17T04:53:51.185Z", - "receivedAt": "2020-01-17T10:23:52.688+05:30", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30" - } - } -] diff --git a/test/__tests__/data/dcm_floodlight_output.json b/test/__tests__/data/dcm_floodlight_output.json deleted file mode 100644 index baad101e7b..0000000000 --- a/test/__tests__/data/dcm_floodlight_output.json +++ /dev/null @@ -1,398 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=22448662;cat=signu01;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=rudder-v2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=akash-v2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=2;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder2;u2=akash2;u3=friendlyName2;u4=name2", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "Missing required value from \"context.device.advertisingId\"", - "statTags": { - "stage": "cdk", - "scope": "transformation", - "meta": "instrumentation", - "destination": "dcm_floodlight" - } - }, - { - "statusCode": 400, - "error": "track:: userAgent is required", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=3;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=3;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "track:: Conversion event not found", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=1;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;cost=800;dc_lat=1;qty=6;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv00;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=999999;cost=800;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;u1=100;u2=5987", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=order0;type=conv000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=1;tfua=1;npa=1;u1=rudder-v1;u2=akash-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "COPPA: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "GDPR: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "npa: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "dc_lat: valid parameters are [1|true] or [0|false]", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "statusCode": 400, - "error": "page:: Conversion event not found", - "statTags": { - "destination": "dcm_floodlight", - "stage": "cdk", - "scope": "exception" - } - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=22448662;cat=signu01;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=0;u2=akash2;u4=1234", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=signu0;type=conv01;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=Pur0;type=conv111;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=ea5cfab2-3961-4d8a-8187-3d1858c90a9f;dc_lat=1;tag_for_child_directed_treatment=0;tfua=1;npa=1;u1=0;u2=akash2;u4=traits-v1", - "headers": { - "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" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/dynamic_yield.json b/test/__tests__/data/dynamic_yield.json deleted file mode 100644 index b7d066feca..0000000000 --- a/test/__tests__/data/dynamic_yield.json +++ /dev/null @@ -1,714 +0,0 @@ -[ - { - "description": "Identify call without hashed email", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": { - "email": "peter@example.com" - }, - "type": "identify", - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": true - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "user0" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Identify User", - "properties": { - "dyType": "identify-v1", - "hashedEmail": "f111db891a36b76df28abc74867e6c7248f796e045117f0cff27b6e2be25d2df" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Identify call with hashed email", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": { - "email": "f111db891a36b76df28abc74867e6c7248f796e045117f0cff27b6e2be25d2df" - }, - "type": "identify", - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "user0" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Identify User", - "properties": { - "dyType": "identify-v1", - "hashedEmail": "f111db891a36b76df28abc74867e6c7248f796e045117f0cff27b6e2be25d2df" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call with Product Added event", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "event": "Product Added", - "userId": "testuserId1", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "testuserId1" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Add to Cart", - "properties": { - "dyType": "add-to-cart-v1", - "value": 39.95, - "productId": "item-34454ga", - "quantity": 1 - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Identify call without email", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": {}, - "type": "identify", - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "user0" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Identify User", - "properties": { - "dyType": "identify-v1", - "cuid": "user0", - "cuidType": "userId" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call with Product Removed event", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "event": "Product Removed", - "userId": "testuserId1", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "testuserId1" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Remove from Cart", - "properties": { - "dyType": "remove-from-cart-v1", - "value": 39.95, - "productId": "item-34454ga", - "quantity": 1 - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call with Product Added to Wishlist event", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "event": "Product Added to Wishlist", - "userId": "testuserId1", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "testuserId1" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Add to Wishlist", - "properties": { - "dyType": "add-to-wishlist-v1", - "value": 39.95, - "productId": "item-34454ga", - "quantity": 1 - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call with order completed event", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "event": "Order Completed", - "userId": "testuserId1", - "properties": { - "checkout_id": "12345", - "order_id": "1234", - "affiliation": "Apple Store", - "total": 20, - "revenue": 15.0, - "shipping": 4, - "tax": 1, - "discount": 1.5, - "coupon": "ImagePro", - "currency": "USD", - "products": [ - { - "product_id": "123", - "sku": "G-32", - "name": "Monopoly", - "price": 14, - "quantity": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "F-32", - "name": "UNO", - "price": 3.45, - "quantity": 2, - "category": "Games" - } - ] - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "hashEmail": false - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "testuserId1" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "Purchase", - "properties": { - "dyType": "purchase-v1", - "uniqueTransactionId": "1234", - "value": 15, - "currency": "USD", - "cart": [ - { - "itemPrice": 14, - "productId": "G-32", - "quantity": 1 - }, - { - "itemPrice": 3.45, - "productId": "F-32", - "quantity": 2 - } - ] - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Unsupported group call check", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": { - "email": "peter@example.com" - }, - "type": "group", - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - "output": { - "error": "message type group is not supported" - } - }, - { - "description": "Event type not present", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": { - "email": "peter@example.com" - }, - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - "output": { - "error": "message Type is not present. Aborting message." - } - }, - { - "description": "API Key not present", - "input": { - "message": { - "anonymousId": "507f191e810c19729de860ea", - "type": "identify", - "context": { - "ip": "54.100.200.255", - "sessionId": "16733896350494", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - }, - "integrations": { "All": true }, - "receivedAt": "2015-02-23T22:28:55.387Z", - "sentAt": "2015-02-23T22:28:55.111Z", - "timestamp": "2015-02-23T22:28:55.111Z", - "traits": { - "email": "peter@example.com" - }, - "userId": "user0", - "version": "1" - }, - "destination": { - "Config": {} - } - }, - "output": { - "error": "Api Key is not present" - } - }, - { - "description": "Event is not there in input", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "testuserId1", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - "output": { - "error": "event is not present. Aborting." - } - }, - { - "description": "Track call with custom event", - "input": { - "message": { - "context": { - "traits": { "email": "testone@gmail.com" }, - "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", - "ip": "54.100.200.255" - }, - "type": "track", - "session_id": "16733896350494", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "event": "custom event", - "userId": "testuserId1", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://dy-api.com/v2/collect/user/event", - "headers": { - "Content-Type": "application/json", - "DY-API-Key": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": { - "user": { "id": "testuserId1" }, - "session": { "custom": "16733896350494" }, - "context": { "device": { "ip": "54.100.200.255" } }, - "events": [ - { - "name": "custom event", - "properties": { - "product_id": "123", - "sku": "item-34454ga", - "category": "Games", - "name": "Game", - "brand": "Gamepro", - "variant": "111", - "price": 39.95, - "quantity": 1, - "coupon": "DISC21", - "position": 1, - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.png" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - } -] diff --git a/test/__tests__/data/eloqua.json b/test/__tests__/data/eloqua.json deleted file mode 100644 index ed64f74d09..0000000000 --- a/test/__tests__/data/eloqua.json +++ /dev/null @@ -1,359 +0,0 @@ -[ - { - "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_pixel_proxy_input.json b/test/__tests__/data/facebook_pixel_proxy_input.json deleted file mode 100644 index 520cb0fc8d..0000000000 --- a/test/__tests__/data/facebook_pixel_proxy_input.json +++ /dev/null @@ -1,200 +0,0 @@ -[ - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654773112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=invalid_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654773112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=my_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=invalid_timestamp_correct_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=throttled_valid_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=invalid_account_id_valid_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"d58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=not_found_access_token", - "params": { - "destination": "facebook_pixel" - } - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": { - "destination": "facebook_pixel" - }, - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234570/events?access_token=valid_access_token" - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": { - "destination": "facebook_pixel" - }, - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234571/events?access_token=valid_access_token" - }, - { - "body": { - "XML": {}, - "FORM": { - "data": [ - "{\"user_data\":{\"external_id\":\"c58f05b5e3cc4796f3181cf07349d306547c00b20841a175b179c6860e6a34ab\",\"client_ip_address\":\"32.122.223.26\",\"client_user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\"},\"event_name\":\"Checkout Step Viewed\",\"event_time\":1654772112,\"event_source_url\":\"https://www.my.kaiser.com/checkout\",\"event_id\":\"4f002656-a7b2-4c17-b9bd-8caa5a29190a\",\"custom_data\":{\"checkout_id\":\"26SF29B\",\"site\":\"www.my.kaiser.com\",\"step\":1}}" - ] - }, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": { - "destination": "facebook_pixel" - }, - "userId": "", - "headers": {}, - "version": "1", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234572/events?access_token=valid_access_token_unhandled_response" - } -] diff --git a/test/__tests__/data/facebook_pixel_proxy_output.json b/test/__tests__/data/facebook_pixel_proxy_output.json deleted file mode 100644 index e0afb028d3..0000000000 --- a/test/__tests__/data/facebook_pixel_proxy_output.json +++ /dev/null @@ -1,223 +0,0 @@ -[ - { - "output": { - "status": 400, - "message": "Invalid OAuth 2.0 access token", - "destinationResponse": { - "error": { - "message": "The access token could not be decrypted", - "type": "OAuthException", - "code": 190, - "fbtrace_id": "fbpixel_trace_id" - }, - "status": 500 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "events_received": 1, - "fbtrace_id": "facebook_trace_id" - } - } - }, - { - "output": { - "status": 400, - "message": "Event Timestamp Too Old", - "destinationResponse": { - "error": { - "message": "Invalid parameter", - "type": "OAuthException", - "code": 100, - "error_subcode": 2804003, - "is_transient": false, - "error_user_title": "Event Timestamp Too Old", - "error_user_msg": "The timestamp for this event is too far in the past. Events need to be sent from your server within 7 days of when they occurred. Enter a timestamp that has occurred within the last 7 days.", - "fbtrace_id": "A6UyEgg_HdoiRX9duxcBOjb" - }, - "status": 400 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 429, - "message": "API User Too Many Calls", - "destinationResponse": { - "error": { - "message": "User request limit reached", - "type": "OAuthException", - "code": 17, - "fbtrace_id": "facebook_px_trace_id_4" - }, - "status": 500 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "throttled", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 400, - "message": "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", - "destinationResponse": { - "error": { - "message": "Unsupported post request. Object with ID '1234567891234569' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api", - "type": "GraphMethodException", - "code": 100, - "error_subcode": 33, - "fbtrace_id": "facebook_px_trace_id_5" - }, - "status": 400 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 400, - "message": "Invalid Parameter", - "destinationResponse": { - "error": { - "message": "Invalid Parameter", - "type": "GraphMethodException", - "code": 100, - "error_subcode": 34, - "fbtrace_id": "facebook_px_trace_id_6" - }, - "status": 404 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - - { - "output": { - "status": 400, - "message": "Invalid Parameter", - "destinationResponse": { - "error": { - "message": "Unsupported post request. some problem with sent parameters", - "type": "GraphMethodException", - "code": 100, - "error_subcode": 38, - "fbtrace_id": "facebook_px_trace_id_6" - }, - "status": 400 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 400, - "message": "Capability or permissions issue.", - "destinationResponse": { - "error": { - "message": "Some error in permission", - "type": "GraphMethodException", - "code": 3, - "error_subcode": 10, - "fbtrace_id": "facebook_px_trace_id_7" - }, - "status": 500 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 500, - "message": "Unhandled random error", - "destinationResponse": { - "error": { - "message": "Unhandled random error", - "type": "RandomException", - "code": 5, - "error_subcode": 12, - "fbtrace_id": "facebook_px_trace_id_10" - }, - "status": 412 - }, - "statTags": { - "destType": "FACEBOOK_PIXEL", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "retryable", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination", - "meta": "unhandledStatusCode" - } - } - } -] diff --git a/test/__tests__/data/fb_proxy_input.json b/test/__tests__/data/fb_proxy_input.json deleted file mode 100644 index d158c970e4..0000000000 --- a/test/__tests__/data/fb_proxy_input.json +++ /dev/null @@ -1,156 +0,0 @@ -[ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "event": "CUSTOM_APP_EVENTS", - "advertiser_id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "ud[em]": "48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08", - "ud[fn]": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", - "ud[ge]": "62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a", - "ud[ln]": "3547cb112ac4489af2310c0626cdba6f3097a2ad5a3b42ddd3b59c76c7a079a3", - "ud[ph]": "588211a01b10feacbf7988d97a06e86c18af5259a7f457fd8759b7f7409a7d1f", - "extinfo": "[\"a2\",\"\",\"\",\"\",\"8.1.0\",\"Redmi 6\",\"\",\"\",\"Banglalink\",640,480,\"1.23\",0,0,0,\"Europe/Berlin\"]", - "app_user_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "custom_events": "[{\"_logTime\":1567333011693,\"_eventName\":\"spin_result\",\"_valueToSum\":400,\"fb_currency\":\"GBP\",\"additional_bet_index\":0,\"battle_id\":\"N/A\",\"bet_amount\":9,\"bet_level\":1,\"bet_multiplier\":1,\"coin_balance\":9466052,\"current_module_name\":\"CasinoGameModule\",\"days_in_game\":0,\"extra_param\":\"N/A\",\"fb_profile\":\"0\",\"featureGameType\":\"N/A\",\"game_fps\":30,\"game_id\":\"fireEagleBase\",\"game_name\":\"FireEagleSlots\",\"gem_balance\":0,\"graphicsQuality\":\"HD\",\"idfa\":\"2bf99787-33d2-4ae2-a76a-c49672f97252\",\"internetReachability\":\"ReachableViaLocalAreaNetwork\",\"isLowEndDevice\":\"False\",\"is_auto_spin\":\"False\",\"is_turbo\":\"False\",\"isf\":\"False\",\"ishighroller\":\"False\",\"jackpot_win_amount\":90,\"jackpot_win_type\":\"Silver\",\"level\":6,\"lifetime_gem_balance\":0,\"no_of_spin\":1,\"player_total_battles\":0,\"player_total_shields\":0,\"start_date\":\"2019-08-01\",\"total_payments\":0,\"tournament_id\":\"T1561970819\",\"userId\":\"c82cbdff-e5be-4009-ac78-cdeea09ab4b1\",\"versionSessionCount\":2,\"win_amount\":0,\"fb_content_id\":[\"123\",\"345\",\"567\"]}]", - "advertiser_tracking_enabled": "0", - "application_tracking_enabled": "0" - }, - "JSON": {} - }, - "endpoint": "https://graph.facebook.com/v17.0/RudderFbApp/activities?access_token=invalid_access_token", - "files": {}, - "headers": { - "x-forwarded-for": "1.2.3.4" - }, - "method": "POST", - "statusCode": 200, - "type": "REST", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "version": "1", - "params": { - "destination": "fb" - } - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "event": "CUSTOM_APP_EVENTS", - "advertiser_id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "ud[em]": "48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08", - "ud[fn]": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", - "ud[ge]": "62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a", - "ud[ln]": "3547cb112ac4489af2310c0626cdba6f3097a2ad5a3b42ddd3b59c76c7a079a3", - "ud[ph]": "588211a01b10feacbf7988d97a06e86c18af5259a7f457fd8759b7f7409a7d1f", - "extinfo": "[\"a2\",\"\",\"\",\"\",\"8.1.0\",\"Redmi 6\",\"\",\"\",\"Banglalink\",640,480,\"1.23\",0,0,0,\"Europe/Berlin\"]", - "app_user_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "custom_events": "[{\"_logTime\":1567333011693,\"_eventName\":\"spin_result\",\"_valueToSum\":400,\"fb_currency\":\"GBP\",\"additional_bet_index\":0,\"battle_id\":\"N/A\",\"bet_amount\":9,\"bet_level\":1,\"bet_multiplier\":1,\"coin_balance\":9466052,\"current_module_name\":\"CasinoGameModule\",\"days_in_game\":0,\"extra_param\":\"N/A\",\"fb_profile\":\"0\",\"featureGameType\":\"N/A\",\"game_fps\":30,\"game_id\":\"fireEagleBase\",\"game_name\":\"FireEagleSlots\",\"gem_balance\":0,\"graphicsQuality\":\"HD\",\"idfa\":\"2bf99787-33d2-4ae2-a76a-c49672f97252\",\"internetReachability\":\"ReachableViaLocalAreaNetwork\",\"isLowEndDevice\":\"False\",\"is_auto_spin\":\"False\",\"is_turbo\":\"False\",\"isf\":\"False\",\"ishighroller\":\"False\",\"jackpot_win_amount\":90,\"jackpot_win_type\":\"Silver\",\"level\":6,\"lifetime_gem_balance\":0,\"no_of_spin\":1,\"player_total_battles\":0,\"player_total_shields\":0,\"start_date\":\"2019-08-01\",\"total_payments\":0,\"tournament_id\":\"T1561970819\",\"userId\":\"c82cbdff-e5be-4009-ac78-cdeea09ab4b1\",\"versionSessionCount\":2,\"win_amount\":0,\"fb_content_id\":[\"123\",\"345\",\"567\"]}]", - "advertiser_tracking_enabled": "0", - "application_tracking_enabled": "0" - }, - "JSON": {} - }, - "endpoint": "https://graph.facebook.com/v17.0/RudderFbApp/activities?access_token=my_access_token", - "files": {}, - "headers": { - "x-forwarded-for": "1.2.3.4" - }, - "method": "POST", - "statusCode": 200, - "type": "REST", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "version": "1", - "params": { - "destination": "fb" - } - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "event": "CUSTOM_APP_EVENTS", - "advertiser_id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "ud[em]": "48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08", - "ud[fn]": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", - "ud[ge]": "62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a", - "ud[ln]": "3547cb112ac4489af2310c0626cdba6f3097a2ad5a3b42ddd3b59c76c7a079a3", - "ud[ph]": "588211a01b10feacbf7988d97a06e86c18af5259a7f457fd8759b7f7409a7d1f", - "extinfo": "[\"a2\",\"\",\"\",\"\",\"8.1.0\",\"Redmi 6\",\"\",\"\",\"Banglalink\",640,480,\"1.23\",0,0,0,\"Europe/Berlin\"]", - "app_user_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "custom_events": "[{\"_logTime\":1567333011693,\"_eventName\":\"spin_result\",\"_valueToSum\":400,\"fb_currency\":\"GBP\",\"additional_bet_index\":0,\"battle_id\":\"N/A\",\"bet_amount\":9,\"bet_level\":1,\"bet_multiplier\":1,\"coin_balance\":9466052,\"current_module_name\":\"CasinoGameModule\",\"days_in_game\":0,\"extra_param\":\"N/A\",\"fb_profile\":\"0\",\"featureGameType\":\"N/A\",\"game_fps\":30,\"game_id\":\"fireEagleBase\",\"game_name\":\"FireEagleSlots\",\"gem_balance\":0,\"graphicsQuality\":\"HD\",\"idfa\":\"2bf99787-33d2-4ae2-a76a-c49672f97252\",\"internetReachability\":\"ReachableViaLocalAreaNetwork\",\"isLowEndDevice\":\"False\",\"is_auto_spin\":\"False\",\"is_turbo\":\"False\",\"isf\":\"False\",\"ishighroller\":\"False\",\"jackpot_win_amount\":90,\"jackpot_win_type\":\"Silver\",\"level\":6,\"lifetime_gem_balance\":0,\"no_of_spin\":1,\"player_total_battles\":0,\"player_total_shields\":0,\"start_date\":\"2019-08-01\",\"total_payments\":0,\"tournament_id\":\"T1561970819\",\"userId\":\"c82cbdff-e5be-4009-ac78-cdeea09ab4b1\",\"versionSessionCount\":2,\"win_amount\":0,\"fb_content_id\":[\"123\",\"345\",\"567\"]}]", - "advertiser_tracking_enabled": "0", - "application_tracking_enabled": "0" - }, - "JSON": {} - }, - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=invalid_timestamp_correct_access_token", - "files": {}, - "headers": { - "x-forwarded-for": "1.2.3.4" - }, - "method": "POST", - "statusCode": 200, - "type": "REST", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "version": "1", - "params": { - "destination": "fb" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=throttled_valid_access_token", - "headers": {}, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "extinfo": "[\"a2\",\"\",\"\",\"\",\"8.1.0\",\"Redmi 6\",\"\",\"\",\"Banglalink\",0,100,\"50.00\",0,0,0,\"\"]", - "custom_events": "[{\"_logTime\":1567333011693,\"_eventName\":\"Viewed Screen\",\"fb_description\":\"Main.1233\"}]", - "ud[em]": "48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08", - "advertiser_tracking_enabled": "0", - "application_tracking_enabled": "0", - "event": "CUSTOM_APP_EVENTS" - } - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "statusCode": 200, - "params": { - "destination": "fb" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://graph.facebook.com/v17.0/1234567891234567/events?access_token=invalid_account_id_valid_access_token", - "headers": {}, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "extinfo": "[\"a2\",\"\",\"\",\"\",\"8.1.0\",\"Redmi 6\",\"\",\"\",\"Banglalink\",0,100,\"50.00\",0,0,0,\"\"]", - "custom_events": "[{\"_logTime\":1567333011693,\"_eventName\":\"Viewed Screen\",\"fb_description\":\"Main.1233\"}]", - "ud[em]": "48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08", - "advertiser_tracking_enabled": "0", - "application_tracking_enabled": "0", - "event": "CUSTOM_APP_EVENTS" - } - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "statusCode": 200, - "params": { - "destination": "fb" - } - } -] diff --git a/test/__tests__/data/fb_proxy_output.json b/test/__tests__/data/fb_proxy_output.json deleted file mode 100644 index 12e06cff2c..0000000000 --- a/test/__tests__/data/fb_proxy_output.json +++ /dev/null @@ -1,117 +0,0 @@ -[ - { - "output": { - "status": 400, - "message": "Invalid OAuth 2.0 access token", - "destinationResponse": { - "error": { - "message": "The access token could not be decrypted", - "type": "OAuthException", - "code": 190, - "fbtrace_id": "fbpixel_trace_id" - }, - "status": 500 - }, - "statTags": { - "destType": "FB", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "events_received": 1, - "fbtrace_id": "facebook_trace_id" - } - } - }, - { - "output": { - "status": 400, - "message": "Event Timestamp Too Old", - "destinationResponse": { - "error": { - "message": "Invalid parameter", - "type": "OAuthException", - "code": 100, - "error_subcode": 2804003, - "is_transient": false, - "error_user_title": "Event Timestamp Too Old", - "error_user_msg": "The timestamp for this event is too far in the past. Events need to be sent from your server within 7 days of when they occurred. Enter a timestamp that has occurred within the last 7 days.", - "fbtrace_id": "A6UyEgg_HdoiRX9duxcBOjb" - }, - "status": 400 - }, - "statTags": { - "destType": "FB", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 429, - "message": "API User Too Many Calls", - "destinationResponse": { - "error": { - "message": "User request limit reached", - "type": "OAuthException", - "code": 17, - "fbtrace_id": "facebook_px_trace_id_4" - }, - "status": 500 - }, - "statTags": { - "destType": "FB", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "throttled", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 400, - "message": "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", - "destinationResponse": { - "error": { - "message": "Unsupported post request. Object with ID '1234567891234569' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api", - "type": "GraphMethodException", - "code": 100, - "error_subcode": 33, - "fbtrace_id": "facebook_px_trace_id_5" - }, - "status": 400 - }, - "statTags": { - "destType": "FB", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - } -] diff --git a/test/__tests__/data/fullstory.json b/test/__tests__/data/fullstory.json deleted file mode 100644 index b6e462005b..0000000000 --- a/test/__tests__/data/fullstory.json +++ /dev/null @@ -1,354 +0,0 @@ -[ - { - "description": "Complete track event", - "input": { - "message": { - "anonymousId": "78c53c15-32a1-4b65-adac-bec2d7bb8fab", - "channel": "web", - "context": { - "app": { - "name": "RSPM", - "version": "1.9.0" - }, - "campaign": { - "name": "sales campaign", - "source": "google", - "medium": "medium", - "term": "event data", - "content": "Make sense of the modern data stack" - }, - "ip": "192.0.2.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "locale": "en-US", - "device": { - "manufacturer": "Nokia", - "model": "N2023" - }, - "page": { - "path": "/best-seller/1", - "initial_referrer": "https://www.google.com/search", - "initial_referring_domain": "google.com", - "referrer": "https://www.google.com/search?q=estore+bestseller", - "referring_domain": "google.com", - "search": "estore bestseller", - "title": "The best sellers offered by EStore", - "url": "https://www.estore.com/best-seller/1" - }, - "screen": { - "density": 420, - "height": 1794, - "width": 1080, - "innerHeight": 200, - "innerWidth": 100 - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "event": "Product Reviewed", - "integrations": { - "All": true - }, - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "properties": { - "userId": "u001", - "sessionId": "s001", - "review_id": "review_id_1", - "product_id": "product_id_1", - "rating": 5.0, - "review_body": "Sample Review Body", - "latitude": 44.56, - "longitude": 54.46, - "region": "Atlas", - "city": "NY", - "country": "USA" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "Fullstory", - "DestinationDefinition": { - "Config": { - "cdkV2Enabled": true - } - }, - "Config": { - "apiKey": "dummyfullstoryAPIKey" - }, - "Enabled": true, - "Transformations": [] - }, - "metadata": { - "sourceType": "fddf", - "destinationType": "fdf", - "k8_namespace": "fdfd" - } - }, - "output": { - "body": { - "JSON": { - "name": "Product Reviewed", - "properties": { - "userId": "u001", - "sessionId": "s001", - "review_id": "review_id_1", - "product_id": "product_id_1", - "rating": 5, - "review_body": "Sample Review Body", - "latitude": 44.56, - "longitude": 54.46, - "region": "Atlas", - "city": "NY", - "country": "USA" - }, - "timestamp": "2020-01-09T10:01:53.558Z", - "context": { - "browser": { - "url": "https://www.estore.com/best-seller/1", - "user_agent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)", - "initial_referrer": "https://www.google.com/search" - }, - "mobile": { - "app_name": "RSPM", - "app_version": "1.9.0" - }, - "device": { - "manufacturer": "Nokia", - "model": "N2023" - }, - "location": { - "ip_address": "192.0.2.0", - "latitude": 44.56, - "longitude": 54.46, - "city": "NY", - "region": "Atlas", - "country": "USA" - } - }, - "session": { - "id": "s001" - }, - "user": { - "id": "u001" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "method": "POST", - "params": {}, - "version": "1", - "type": "REST", - "endpoint": "https://api.fullstory.com/v2/events", - "headers": { - "authorization": "Basic dummyfullstoryAPIKey", - "content-type": "application/json" - }, - "files": {} - } - }, - { - "description": "Missing event name", - "input": { - "message": { - "channel": "web", - "context": { - "device": { - "manufacturer": "Nokia", - "model": "N2023" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)" - }, - "integrations": { - "All": true - }, - "properties": { - "userId": "u001", - "latitude": 44.56, - "longitude": 54.46, - "region": "Atlas", - "city": "NY", - "country": "USA" - }, - "originalTimestamp": "2020-01-09T10:01:53.558Z", - "type": "track", - "sentAt": "2020-01-09T10:02:03.257Z" - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "Fullstory", - "DestinationDefinition": { - "Config": { - "cdkV2Enabled": true - } - }, - "Config": { - "apiKey": "dummyfullstoryAPIKey" - }, - "Enabled": true, - "Transformations": [] - }, - "metadata": { - "sourceType": "fddf", - "destinationType": "fdf", - "k8_namespace": "fdfd" - } - }, - "output": { - "error": "event is required for track call: Workflow: procWorkflow, Step: validateEventName, ChildStep: undefined, OriginalError: event is required for track call" - } - }, - { - "description": "Complete identify event", - "input": { - "message": { - "userId": "dummy-user001", - "channel": "web", - "context": { - "traits": { - "company": "Initech", - "address": { - "country": "USA", - "state": "CA", - "street": "101 dummy street" - }, - "email": "dummyuser@domain.com", - "name": "dummy user", - "phone": "099-999-9999" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" - }, - "integrations": { - "All": true - }, - "originalTimestamp": "2020-01-27T12:20:55.301Z", - "receivedAt": "2020-01-27T17:50:58.657+05:30", - "request_ip": "14.98.244.60", - "sentAt": "2020-01-27T12:20:56.849Z", - "timestamp": "2020-01-27T17:50:57.109+05:30", - "type": "identify" - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "Fullstory", - "DestinationDefinition": { - "Config": { - "cdkV2Enabled": true - } - }, - "Config": { - "apiKey": "fullstoryAPIKey" - }, - "Enabled": true, - "Transformations": [] - }, - "metadata": { - "sourceType": "fddf", - "destinationType": "fdf", - "k8_namespace": "fdfd" - } - }, - "output": { - "body": { - "JSON": { - "properties": { - "company": "Initech", - "address": { - "country": "USA", - "state": "CA", - "street": "101 dummy street" - }, - "email": "dummyuser@domain.com", - "name": "dummy user", - "phone": "099-999-9999" - }, - "uid": "dummy-user001", - "email": "dummyuser@domain.com", - "display_name": "dummy user" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.fullstory.com/v2/users", - "headers": { - "authorization": "Basic fullstoryAPIKey", - "content-type": "application/json" - }, - "params": {}, - "files": {} - } - }, - { - "description": "Identify event with needed traits", - "input": { - "message": { - "userId": "dummy-user001", - "channel": "web", - "context": { - "traits": { - "email": "dummyuser@domain.com", - "name": "dummy user", - "phone": "099-999-9999" - } - }, - "timestamp": "2020-01-27T17:50:57.109+05:30", - "type": "identify" - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "Fullstory", - "DestinationDefinition": { - "Config": { - "cdkV2Enabled": true - } - }, - "Config": { - "apiKey": "fullstoryAPIKey" - }, - "Enabled": true, - "Transformations": [] - }, - "metadata": { - "sourceType": "fddf", - "destinationType": "fdf", - "k8_namespace": "fdfd" - } - }, - "output": { - "body": { - "JSON": { - "properties": { - "email": "dummyuser@domain.com", - "name": "dummy user", - "phone": "099-999-9999" - }, - "uid": "dummy-user001", - "email": "dummyuser@domain.com", - "display_name": "dummy user" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.fullstory.com/v2/users", - "headers": { - "authorization": "Basic fullstoryAPIKey", - "content-type": "application/json" - }, - "params": {}, - "files": {} - } - } -] diff --git a/test/__tests__/data/heap_cdk_output.json b/test/__tests__/data/heap_cdk_output.json deleted file mode 100644 index 7f119ffa82..0000000000 --- a/test/__tests__/data/heap_cdk_output.json +++ /dev/null @@ -1,180 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/add_user_properties", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "properties": { - "anonymousId": "sampath", - "email": "sampath@gmail.com" - }, - "app_id": "" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/track", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "event": "Send Transactional Email", - "properties": { - "subject": "Welcome to My App!", - "variation": "A" - }, - "app_id": "", - "timestamp": "2020-01-16T18:53:20.866+05:30" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { - "statusCode": 400, - "error": "message Type is not present. Aborting message." - }, - { - "statusCode": 400, - "error": "message type page is not supported" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/track", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "event": "Send Transactional Email", - "properties": { - "subject": "Welcome to My App!", - "variation": "A" - }, - "timestamp": "2021-02-16T18:53:20.866+05:30", - "idempotency_key": "1234", - "app_id": "" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/track", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "event": "Send Transactional Email", - "properties": { - "subject": "Welcome to My App!", - "variation": "A" - }, - "timestamp": "2020-01-16T18:53:20.866+05:30", - "idempotency_key": "1234", - "app_id": "" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/track", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "event": "Send Transactional Email", - "properties": { - "Location.City": "Los Angeles", - "Location.State": "CA", - "hobbies[0]": "Music", - "hobbies[1]": "Running" - }, - "timestamp": "2020-01-16T18:53:20.866+05:30", - "app_id": "" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://heapanalytics.com/api/track", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "identity": "sampath", - "event": "Send Transactional Email", - "properties": { - "subject": "Welcome to My App!", - "variation": "A" - }, - "timestamp": "2020-01-16T18:53:20.866+05:30", - "app_id": "" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - } -] diff --git a/test/__tests__/data/kafka_batch_input.json b/test/__tests__/data/kafka_batch_input.json deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/__tests__/data/kafka_batch_output.json b/test/__tests__/data/kafka_batch_output.json deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/__tests__/data/kochava_cdk_output.json b/test/__tests__/data/kochava_cdk_output.json deleted file mode 100644 index f8067b6bc3..0000000000 --- a/test/__tests__/data/kochava_cdk_output.json +++ /dev/null @@ -1,529 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "sampath", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "usertime": 1579236831206, - "origination_ip": "1.1.1.1", - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "os_version": "15.9", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "Add to Cart", - "event_data": { "name": "sampath" } - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { "statusCode": 400, "error": "message type identify is not supported" }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "os_version": "", - "usertime": 1571043797562, - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "screen view", - "event_data": {}, - "origination_ip": "1.1.1.1" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "os_version": "", - "usertime": 1571043797562, - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "screen view Home Screen", - "event_data": { "name": "Home Screen" }, - "origination_ip": "1.1.1.1" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { "att": false }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-Android-8.1.0", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "some_adid", - "android_id": "5094f5704b9cf2b3" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { "name": "MainActivity", "automatic": true }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "8.1.0", - "screen_dpi": 420 - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { "att": true }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-iOS-14.5", - "device_ids": { - "idfa": "some_adid", - "idfv": "5094f5704b9cf2b3", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { "name": "MainActivity", "automatic": true }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "14.5", - "screen_dpi": 420 - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": true - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "", - "device_ids": { - "idfa": "some_adid", - "idfv": "5094f5704b9cf2b3", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-Android-8.1.0", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "5094f5704b9cf2b3" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "8.1.0", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": true - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "00000000000000000000000000", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "00000000000000000000000000", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "00000000000000000000000000" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - } -] diff --git a/test/__tests__/data/kochava_input.json b/test/__tests__/data/kochava_input.json deleted file mode 100644 index 941a28ce22..0000000000 --- a/test/__tests__/data/kochava_input.json +++ /dev/null @@ -1,811 +0,0 @@ -[ - { - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava 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": "1.1.1.1", - "library": { "name": "RudderLabs JavaScript SDK", "version": "1.0.0" }, - "locale": "en-US", - "os": { "name": "macOS", "version": "15.9" }, - "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": "0.0.0.0", - "sentAt": "2020-01-17T04:53:52.667Z", - "timestamp": "2020-01-17T10:23:51.206+05:30", - "type": "track", - "userId": "sampath" - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "name": "Home Screen", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "properties": { - "name": "Home Screen" - }, - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "version": "1.0" - }, - "device": { - "id": "5094f5704b9cf2b3", - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "android", - "adTrackingEnabled": true, - "advertisingId": "some_adid" - }, - "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": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "version": "1.0" - }, - "device": { - "id": "5094f5704b9cf2b3", - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "android", - "adTrackingEnabled": true, - "advertisingId": "some_adid", - "attTrackingStatus": 3 - }, - "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": "iOS", - "version": "14.5" - }, - "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": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "version": "1.0" - }, - "device": { - "id": "5094f5704b9cf2b3", - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "ipados", - "adTrackingEnabled": true, - "advertisingId": "some_adid", - "attTrackingStatus": 3 - }, - "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": "ipados" - }, - "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": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "version": "1.0" - }, - "device": { - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "android", - "adTrackingEnabled": true - }, - "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": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "version": "1.0" - }, - "device": { - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "type": "android", - "adTrackingEnabled": true - }, - "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 - }, - "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": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "name": "Home Screen", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "timestamp": "2019-10-14T09:03:17.562Z", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "ios", - "version": "" - }, - "device": { - "attTrackingStatus": 3 - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "name": "Home Screen", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "timestamp": "2019-10-14T09:03:17.562Z", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "tvOS", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "name": "Home Screen", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "timestamp": "2019-10-14T09:03:17.562Z", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - }, - { - "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": "1.1.1.1", - "os": { - "name": "android", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "name": "Home Screen", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "timestamp": "2019-10-14T09:03:17.562Z", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - }, - "DisplayName": "Kochava", - "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU", - "Name": "KOCHAVA" - }, - "Enabled": true, - "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - "Name": "kochava test", - "Transformations": [] - } - } -] diff --git a/test/__tests__/data/kochava_output.json b/test/__tests__/data/kochava_output.json deleted file mode 100644 index 3c22572c78..0000000000 --- a/test/__tests__/data/kochava_output.json +++ /dev/null @@ -1,529 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "sampath", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "usertime": 1579236831206, - "origination_ip": "1.1.1.1", - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "os_version": "15.9", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "Add to Cart", - "event_data": { "name": "sampath" } - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "sampath" - }, - { "statusCode": 400, "error": "message type \"identify\" not supported for \"kochava\"" }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "os_version": "", - "usertime": 1571043797562, - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "screen view", - "event_data": {}, - "origination_ip": "1.1.1.1" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "currency": "USD", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ver": "", - "os_version": "", - "usertime": 1571043797562, - "device_ua": "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", - "app_name": "RudderLabs JavaScript SDK", - "app_version": "1.0.0", - "app_short_string": "1.0.0", - "screen_dpi": 2, - "locale": "en-US", - "event_name": "screen view Home Screen", - "event_data": { "name": "Home Screen" }, - "origination_ip": "1.1.1.1" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { "att": false }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-Android-8.1.0", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "some_adid", - "android_id": "5094f5704b9cf2b3" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { "name": "MainActivity", "automatic": true }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "8.1.0", - "screen_dpi": 420 - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { "att": true }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-iOS-14.5", - "device_ids": { - "idfa": "some_adid", - "idfv": "5094f5704b9cf2b3", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { "name": "MainActivity", "automatic": true }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "14.5", - "screen_dpi": 420 - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": true - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "", - "device_ids": { - "idfa": "some_adid", - "idfv": "5094f5704b9cf2b3", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "Android SDK built for x86-Android-8.1.0", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "5094f5704b9cf2b3" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "os_version": "8.1.0", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "5094f5704b9cf2b3", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1584003903421, - "app_version": "1", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ua": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)", - "event_name": "screen view MainActivity", - "currency": "USD", - "event_data": { - "name": "MainActivity", - "automatic": true - }, - "app_name": "LeanPlumIntegrationAndroid", - "app_short_string": "1.0", - "locale": "en-US", - "screen_dpi": 420 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": true - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "00000000000000000000000000", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "00000000000000000000000000", - "adid": "", - "android_id": "" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://control.kochava.com/track/json", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "action": "event", - "kochava_app_id": "", - "kochava_device_id": "00000000000000000000000000", - "data": { - "app_tracking_transparency": { - "att": false - }, - "usertime": 1571043797562, - "app_version": "1.0.0", - "device_ver": "", - "device_ids": { - "idfa": "", - "idfv": "", - "adid": "", - "android_id": "00000000000000000000000000" - }, - "device_ua": "", - "event_name": "screen view", - "origination_ip": "1.1.1.1", - "currency": "USD", - "event_data": {}, - "app_name": "RudderLabs JavaScript SDK", - "app_short_string": "1.0.0", - "locale": "en-US", - "os_version": "", - "screen_dpi": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - } -] diff --git a/test/__tests__/data/lambda.json b/test/__tests__/data/lambda.json deleted file mode 100644 index a0b19b5ce3..0000000000 --- a/test/__tests__/data/lambda.json +++ /dev/null @@ -1,334 +0,0 @@ -[ - { - "description": "Simple Identify call", - "input": { - "message": { - "type": "identify", - "sentAt": "2022-08-03T10:44:55.382+05:30", - "userId": "user113", - "context": { - "os": { - "name": "android" - }, - "device": { - "name": "Mi", - "token": "qwertyuioprtyuiop" - }, - "traits": { - "name": "User2", - "email": "user112@mail.com" - } - }, - "rudderId": "ed33ef22-569d-44b1-a6cb-063c69dca8f0", - "messageId": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "timestamp": "2022-08-03T10:44:54.942+05:30", - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-03T10:44:55.382+05:30" - }, - "metadata": { - "userId": "user113<<>>user113", - "jobId": 10, - "sourceId": "2CFEootdF2eQh0CGeD0jdVybP5A", - "destinationId": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "attemptNum": 0, - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "createdAt": "2022-08-03T05:14:55.384Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7", - "secret": null, - "jobsT": { - "UUID": "53927e88-2d5c-4274-ad72-2e1c14a96301", - "JobID": 10, - "UserID": "user113<<>>user113", - "CreatedAt": "2022-08-03T05:14:55.384207Z", - "ExpireAt": "2022-08-03T05:14:55.384207Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "identify", - "sentAt": "2022-08-03T10:44:55.382+05:30", - "userId": "user113", - "context": { - "os": { - "name": "android" - }, - "device": { - "name": "Mi", - "token": "qwertyuioprtyuiop" - }, - "traits": { - "name": "User2", - "email": "user112@mail.com" - } - }, - "rudderId": "ed33ef22-569d-44b1-a6cb-063c69dca8f0", - "messageId": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "timestamp": "2022-08-03T10:44:54.942+05:30", - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-03T10:44:55.382+05:30" - }, - "PayloadSize": 550, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2CFEootdF2eQh0CGeD0jdVybP5A", - "event_name": "", - "event_type": "identify", - "message_id": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "received_at": "2022-08-03T10:44:54.943+05:30", - "workspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "gateway_job_id": 10, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2CCxgViQJACgWABA6h83wlXnE1k", - "destination_definition_id": "" - }, - "WorkspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7" - }, - "pickedAtTime": "2022-08-03T10:44:56.193361+05:30", - "resultSetID": 10 - }, - "destination": { - "ID": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2CoiaHPaRb79wpSG3wZWfrG3B0n", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "accessKeyId", - "accessKey", - "lambda", - "invocationType", - "enableBatchInput", - "clientContext" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": false, - "invocationType": "Event", - "lambda": "testFunction", - "region": "us-west-2", - "accessKey": "" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2CojwWiWjNghiGbfuRcwfs6Bt5q" - } - }, - "output": { - "payload": "{\"type\":\"identify\",\"sentAt\":\"2022-08-03T10:44:55.382+05:30\",\"userId\":\"user113\",\"context\":{\"os\":{\"name\":\"android\"},\"device\":{\"name\":\"Mi\",\"token\":\"qwertyuioprtyuiop\"},\"traits\":{\"name\":\"User2\",\"email\":\"user112@mail.com\"}},\"rudderId\":\"ed33ef22-569d-44b1-a6cb-063c69dca8f0\",\"messageId\":\"29beef33-2771-45fd-adb4-4376aa6d72d9\",\"timestamp\":\"2022-08-03T10:44:54.942+05:30\",\"receivedAt\":\"2022-08-03T10:44:54.943+05:30\",\"request_ip\":\"[::1]\",\"originalTimestamp\":\"2022-08-03T10:44:55.382+05:30\"}", - "destConfig": { - "clientContext": "", - "invocationType": "Event", - "lambda": "testFunction" - } - } - }, - { - "description": "Destination config not present", - "input": { - "message": { - "type": "identify", - "sentAt": "2022-08-03T10:44:55.382+05:30", - "userId": "user113", - "context": { - "os": { - "name": "android" - }, - "device": { - "name": "Mi", - "token": "qwertyuioprtyuiop" - }, - "traits": { - "name": "User2", - "email": "user112@mail.com" - } - }, - "rudderId": "ed33ef22-569d-44b1-a6cb-063c69dca8f0", - "messageId": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "timestamp": "2022-08-03T10:44:54.942+05:30", - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-03T10:44:55.382+05:30" - }, - "metadata": { - "userId": "user113<<>>user113", - "jobId": 10, - "sourceId": "2CFEootdF2eQh0CGeD0jdVybP5A", - "destinationId": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "attemptNum": 0, - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "createdAt": "2022-08-03T05:14:55.384Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7", - "secret": null, - "jobsT": { - "UUID": "53927e88-2d5c-4274-ad72-2e1c14a96301", - "JobID": 10, - "UserID": "user113<<>>user113", - "CreatedAt": "2022-08-03T05:14:55.384207Z", - "ExpireAt": "2022-08-03T05:14:55.384207Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "identify", - "sentAt": "2022-08-03T10:44:55.382+05:30", - "userId": "user113", - "context": { - "os": { - "name": "android" - }, - "device": { - "name": "Mi", - "token": "qwertyuioprtyuiop" - }, - "traits": { - "name": "User2", - "email": "user112@mail.com" - } - }, - "rudderId": "ed33ef22-569d-44b1-a6cb-063c69dca8f0", - "messageId": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "timestamp": "2022-08-03T10:44:54.942+05:30", - "receivedAt": "2022-08-03T10:44:54.943+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-03T10:44:55.382+05:30" - }, - "PayloadSize": 550, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2CFEootdF2eQh0CGeD0jdVybP5A", - "event_name": "", - "event_type": "identify", - "message_id": "29beef33-2771-45fd-adb4-4376aa6d72d9", - "received_at": "2022-08-03T10:44:54.943+05:30", - "workspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "gateway_job_id": 10, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2CCxgViQJACgWABA6h83wlXnE1k", - "destination_definition_id": "" - }, - "WorkspaceId": "2ANaDOTAzxboCOF86FkRGMEJ5F7" - }, - "pickedAtTime": "2022-08-03T10:44:56.193361+05:30", - "resultSetID": 10 - }, - "destination": { - "ID": "2CojwY2YqpiTqfBPrMAUN8orgHA", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2CoiaHPaRb79wpSG3wZWfrG3B0n", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "accessKeyId", - "accessKey", - "lambda", - "invocationType", - "enableBatchInput", - "clientContext" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2CojwWiWjNghiGbfuRcwfs6Bt5q" - } - }, - "output": { - "error": "destination.Config cannot be undefined" - } - } -] diff --git a/test/__tests__/data/lambda_router_input.json b/test/__tests__/data/lambda_router_input.json deleted file mode 100644 index 1cf6a5324d..0000000000 --- a/test/__tests__/data/lambda_router_input.json +++ /dev/null @@ -1,19396 +0,0 @@ -[ - { - "message": { - "type": "identify", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "traits": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "data2": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "c864b4cd-8f07-4922-b3d0-82ef04c987d3", - "timestamp": "2020-02-02T00:23:09.544Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 31, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "47b3937a-1fef-49fa-85c8-649673bd7170", - "JobID": 31, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "identify", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "traits": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "data2": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "c864b4cd-8f07-4922-b3d0-82ef04c987d3", - "timestamp": "2020-02-02T00:23:09.544Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 95943, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "identify", - "message_id": "c864b4cd-8f07-4922-b3d0-82ef04c987d3", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - }, - { - "message": { - "type": "track", - "event": "Product Purchased new", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "9f8fb785-c720-4381-a009-bf22a13f4ced", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "name": "Shirt", - "revenue": 4.99 - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 32, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "dc239cd1-bef4-4999-88e1-7332c64bf78c", - "JobID": 32, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "track", - "event": "Product Purchased new", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "9f8fb785-c720-4381-a009-bf22a13f4ced", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "name": "Shirt", - "revenue": 4.99 - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 48375, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "Product Purchased new", - "event_type": "track", - "message_id": "9f8fb785-c720-4381-a009-bf22a13f4ced", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - }, - { - "message": { - "name": "Page View", - "type": "page", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "5f58d1f7-cbd6-4bff-8571-9933be7210b1", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "path": "/", - "title": "Home" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 33, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "bf616af4-2c6b-495f-8b2d-b522c93bdca2", - "JobID": 33, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "name": "Page View", - "type": "page", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "5f58d1f7-cbd6-4bff-8571-9933be7210b1", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "path": "/", - "title": "Home" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 548, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "page", - "message_id": "5f58d1f7-cbd6-4bff-8571-9933be7210b1", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - }, - { - "message": { - "name": "Screen View", - "type": "screen", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "1b8ee4c3-ffad-4457-b453-31b32da1dfea", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "prop1": "5" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 34, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "8faa9d6d-d8a8-468c-bef4-c2db52f6101b", - "JobID": 34, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "name": "Screen View", - "type": "screen", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "1b8ee4c3-ffad-4457-b453-31b32da1dfea", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "prop1": "5" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 536, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "screen", - "message_id": "1b8ee4c3-ffad-4457-b453-31b32da1dfea", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - }, - { - "message": { - "type": "group", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "traits": { - "name": "Company", - "industry": "Industry", - "employees": 123 - }, - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "groupId": "group1", - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "2c59b527-3235-4fc2-9680-f41ec52ebb51", - "timestamp": "2020-01-21T00:21:34.208Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 35, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "73cea314-998a-4b72-8004-34b0618093a3", - "JobID": 35, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "group", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "traits": { - "name": "Company", - "industry": "Industry", - "employees": 123 - }, - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "groupId": "group1", - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "2c59b527-3235-4fc2-9680-f41ec52ebb51", - "timestamp": "2020-01-21T00:21:34.208Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 589, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "group", - "message_id": "2c59b527-3235-4fc2-9680-f41ec52ebb51", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - }, - { - "message": { - "type": "alias", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d", - "timestamp": "2020-01-21T00:21:34.208Z", - "previousId": "previd1", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "metadata": { - "userId": "anon-id-new<<>>identified user id", - "jobId": 36, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "ac80629c-9eb6-4e92-bee8-4647e88f7fc0", - "JobID": 36, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "alias", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d", - "timestamp": "2020-01-21T00:21:34.208Z", - "previousId": "previd1", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 506, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "alias", - "message_id": "3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - "destination": { - "ID": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "Name": "Lambda test", - "DestinationDefinition": { - "ID": "2DTlHvPWOzBUksUQUvggRnalUkj", - "Name": "LAMBDA", - "DisplayName": "AWS Lambda", - "Config": { - "destConfig": { - "defaultConfig": [ - "region", - "iamRoleARN", - "externalID", - "accessKeyId", - "accessKey", - "lambda", - "enableBatchInput", - "clientContext", - "roleBasedAuth", - "maxBatchSize" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "accessKey", "iamRoleARN", "externalID"], - "supportedMessageTypes": ["identify", "page", "screen", "track", "alias", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "", - "accessKeyId": "", - "clientContext": "", - "enableBatchInput": true, - "externalID": "", - "iamRoleARN": "", - "lambda": "testFunction", - "maxBatchSize": "2", - "region": "us-west-2", - "roleBasedAuth": false - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2DVji2YjKiWRL0Qdx73xg9r8ReQ" - } - } -] diff --git a/test/__tests__/data/lambda_router_output.json b/test/__tests__/data/lambda_router_output.json deleted file mode 100644 index ccc142bc8c..0000000000 --- a/test/__tests__/data/lambda_router_output.json +++ /dev/null @@ -1,9727 +0,0 @@ -[ - { - "batchedRequest": { - "payload": "[{\"type\":\"track\",\"event\":\"Product Purchased new\",\"sentAt\":\"2022-08-18T08:43:15.539+05:30\",\"userId\":\"identified user id\",\"context\":{\"ip\":\"14.5.67.21\",\"library\":{\"name\":\"http\"}},\"rudderId\":\"daf823fb-e8d3-413a-8313-d34cd756f968\",\"messageId\":\"9f8fb785-c720-4381-a009-bf22a13f4ced\",\"timestamp\":\"2020-02-02T00:23:09.544Z\",\"properties\":{\"data\":[{\"id\":6104546,\"url\":\"https://api.github.com/repos/mralexgray/-REPONAME\",\"fork\":false,\"name\":\"-REPONAME\",\"size\":48,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/-REPONAME.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk2MTA0NTQ2\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/-REPONAME.git\",\"svn_url\":\"https://github.com/mralexgray/-REPONAME\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/-REPONAME\",\"keys_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}\",\"language\":null,\"tags_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/-REPONAME.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/forks\",\"full_name\":\"mralexgray/-REPONAME\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}\",\"pushed_at\":\"2012-10-06T16:37:39Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}\",\"created_at\":\"2012-10-06T16:37:39Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/events\",\"has_issues\":true,\"issues_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-12T13:39:30Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}\",\"description\":null,\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":104510411,\"url\":\"https://api.github.com/repos/mralexgray/...\",\"fork\":true,\"name\":\"...\",\"size\":113,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/....git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/....git\",\"svn_url\":\"https://github.com/mralexgray/...\",\"archived\":false,\"disabled\":false,\"has_wiki\":false,\"homepage\":\"https://driesvints.com/blog/getting-started-with-dotfiles\",\"html_url\":\"https://github.com/mralexgray/...\",\"keys_url\":\"https://api.github.com/repos/mralexgray/.../keys{/key_id}\",\"language\":\"Shell\",\"tags_url\":\"https://api.github.com/repos/mralexgray/.../tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/.../git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/....git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/.../forks\",\"full_name\":\"mralexgray/...\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/.../hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/.../pulls{/number}\",\"pushed_at\":\"2017-09-15T08:27:32Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/.../teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/.../git/trees{/sha}\",\"created_at\":\"2017-09-22T19:19:42Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/.../events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/.../issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/.../labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/.../merges\",\"mirror_url\":null,\"updated_at\":\"2017-09-22T19:20:22Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/.../commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/.../compare/{base}...{head}\",\"description\":\":computer: Public repo for my personal dotfiles.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/.../branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/.../comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/.../contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/.../git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/.../git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/.../releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/.../statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/.../assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/.../downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/.../languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/.../milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/.../stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/.../deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/.../git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/.../subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/.../contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/.../issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/.../subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/.../issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":58656723,\"url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol\",\"fork\":true,\"name\":\"2200087-Serial-Protocol\",\"size\":41,\"forks\":1,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/2200087-Serial-Protocol.git\",\"license\":{\"key\":\"gpl-2.0\",\"url\":\"https://api.github.com/licenses/gpl-2.0\",\"name\":\"GNU General Public License v2.0\",\"node_id\":\"MDc6TGljZW5zZTg=\",\"spdx_id\":\"GPL-2.0\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/2200087-Serial-Protocol.git\",\"svn_url\":\"https://github.com/mralexgray/2200087-Serial-Protocol\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://daviddworken.com\",\"html_url\":\"https://github.com/mralexgray/2200087-Serial-Protocol\",\"keys_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}\",\"language\":\"Python\",\"tags_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/2200087-Serial-Protocol.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks\",\"full_name\":\"mralexgray/2200087-Serial-Protocol\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}\",\"pushed_at\":\"2016-05-12T16:07:24Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}\",\"created_at\":\"2016-05-12T16:05:28Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges\",\"mirror_url\":null,\"updated_at\":\"2016-05-12T16:05:30Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}\",\"description\":\"A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter\",\"forks_count\":1,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":13121042,\"url\":\"https://api.github.com/repos/mralexgray/ace\",\"fork\":true,\"name\":\"ace\",\"size\":21080,\"forks\":1,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/ace.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/ace.git\",\"svn_url\":\"https://github.com/mralexgray/ace\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://ace.c9.io\",\"html_url\":\"https://github.com/mralexgray/ace\",\"keys_url\":\"https://api.github.com/repos/mralexgray/ace/keys{/key_id}\",\"language\":\"JavaScript\",\"tags_url\":\"https://api.github.com/repos/mralexgray/ace/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/ace.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/ace/forks\",\"full_name\":\"mralexgray/ace\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/ace/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/ace/pulls{/number}\",\"pushed_at\":\"2013-10-26T12:34:48Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/ace/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/ace/git/trees{/sha}\",\"created_at\":\"2013-09-26T11:58:10Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/ace/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/ace/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/ace/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/ace/merges\",\"mirror_url\":null,\"updated_at\":\"2013-10-26T12:34:49Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/ace/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}\",\"description\":\"Ace (Ajax.org Cloud9 Editor)\",\"forks_count\":1,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/ace/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/ace/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/ace/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/ace/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/ace/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/ace/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/ace/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/ace/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/ace/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/ace/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/ace/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/ace/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/ace/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/ace/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/ace/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/ace/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/ace/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/ace/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/ace/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":10791045,\"url\":\"https://api.github.com/repos/mralexgray/ACEView\",\"fork\":true,\"name\":\"ACEView\",\"size\":1733,\"forks\":1,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/ACEView.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/ACEView.git\",\"svn_url\":\"https://github.com/mralexgray/ACEView\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/ACEView\",\"keys_url\":\"https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/ACEView/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/ACEView.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/ACEView/forks\",\"full_name\":\"mralexgray/ACEView\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/ACEView/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/ACEView/pulls{/number}\",\"pushed_at\":\"2014-05-09T01:36:23Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/ACEView/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}\",\"created_at\":\"2013-06-19T12:15:04Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/ACEView/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/ACEView/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/ACEView/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/ACEView/merges\",\"mirror_url\":null,\"updated_at\":\"2015-11-24T01:14:10Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/ACEView/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}\",\"description\":\"Use the wonderful ACE editor in your Cocoa applications\",\"forks_count\":1,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/ACEView/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/ACEView/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/ACEView/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/ACEView/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/ACEView/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/ACEView/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/ACEView/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/ACEView/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/ACEView/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/ACEView/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/ACEView/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/ACEView/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/ACEView/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":13623648,\"url\":\"https://api.github.com/repos/mralexgray/ActiveLog\",\"fork\":true,\"name\":\"ActiveLog\",\"size\":60,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/ActiveLog.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/ActiveLog.git\",\"svn_url\":\"https://github.com/mralexgray/ActiveLog\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://deepitpro.com/en/articles/ActiveLog/info/\",\"html_url\":\"https://github.com/mralexgray/ActiveLog\",\"keys_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/ActiveLog.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/forks\",\"full_name\":\"mralexgray/ActiveLog\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}\",\"pushed_at\":\"2011-07-03T06:28:59Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}\",\"created_at\":\"2013-10-16T15:52:37Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/merges\",\"mirror_url\":null,\"updated_at\":\"2013-10-16T15:52:37Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}\",\"description\":\"Shut up all logs with active filter.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":9716210,\"url\":\"https://api.github.com/repos/mralexgray/adium\",\"fork\":false,\"name\":\"adium\",\"size\":277719,\"forks\":37,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/adium.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnk5NzE2MjEw\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/adium.git\",\"svn_url\":\"https://github.com/mralexgray/adium\",\"archived\":false,\"disabled\":false,\"has_wiki\":false,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/adium\",\"keys_url\":\"https://api.github.com/repos/mralexgray/adium/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/adium/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/adium.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/adium/forks\",\"full_name\":\"mralexgray/adium\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/adium/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/adium/pulls{/number}\",\"pushed_at\":\"2013-04-26T16:43:53Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/adium/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/adium/git/trees{/sha}\",\"created_at\":\"2013-04-27T14:59:33Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/adium/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/adium/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/adium/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/adium/merges\",\"mirror_url\":null,\"updated_at\":\"2019-12-11T06:51:45Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/adium/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}\",\"description\":\"Official mirror of hg.adium.im\",\"forks_count\":37,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/adium/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/adium/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/adium/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/adium/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/adium/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/adium/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/adium/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/adium/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/adium/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/adium/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/adium/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/adium/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/adium/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/adium/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/adium/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/adium/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/adium/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/adium/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/adium/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":12752329,\"url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView\",\"fork\":true,\"name\":\"ADLivelyTableView\",\"size\":73,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/ADLivelyTableView.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/ADLivelyTableView.git\",\"svn_url\":\"https://github.com/mralexgray/ADLivelyTableView\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://applidium.com/en/news/lively_uitableview/\",\"html_url\":\"https://github.com/mralexgray/ADLivelyTableView\",\"keys_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/ADLivelyTableView.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/forks\",\"full_name\":\"mralexgray/ADLivelyTableView\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}\",\"pushed_at\":\"2012-05-10T10:40:15Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}\",\"created_at\":\"2013-09-11T09:18:01Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/merges\",\"mirror_url\":null,\"updated_at\":\"2013-09-11T09:18:03Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}\",\"description\":\"Lively UITableView\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":5697379,\"url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore\",\"fork\":true,\"name\":\"AFIncrementalStore\",\"size\":139,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AFIncrementalStore.git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnk1Njk3Mzc5\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AFIncrementalStore.git\",\"svn_url\":\"https://github.com/mralexgray/AFIncrementalStore\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/AFIncrementalStore\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AFIncrementalStore.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/forks\",\"full_name\":\"mralexgray/AFIncrementalStore\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}\",\"pushed_at\":\"2012-09-01T22:46:25Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}\",\"created_at\":\"2012-09-06T04:20:33Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-12T03:15:29Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}\",\"description\":\"Core Data Persistence with AFNetworking, Done Right\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":6969621,\"url\":\"https://api.github.com/repos/mralexgray/AFNetworking\",\"fork\":true,\"name\":\"AFNetworking\",\"size\":4341,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AFNetworking.git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnk2OTY5NjIx\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AFNetworking.git\",\"svn_url\":\"https://github.com/mralexgray/AFNetworking\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://afnetworking.com\",\"html_url\":\"https://github.com/mralexgray/AFNetworking\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/tags\",\"watchers\":2,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AFNetworking.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/forks\",\"full_name\":\"mralexgray/AFNetworking\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}\",\"pushed_at\":\"2014-01-24T07:14:32Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}\",\"created_at\":\"2012-12-02T17:00:04Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/merges\",\"mirror_url\":null,\"updated_at\":\"2014-01-24T07:14:33Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}\",\"description\":\"A delightful iOS and OS X networking framework\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/stargazers\",\"watchers_count\":2,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}\",\"stargazers_count\":2,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":9485541,\"url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView\",\"fork\":true,\"name\":\"AGNSSplitView\",\"size\":68,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AGNSSplitView.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk5NDg1NTQx\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AGNSSplitView.git\",\"svn_url\":\"https://github.com/mralexgray/AGNSSplitView\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/AGNSSplitView\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AGNSSplitView.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/forks\",\"full_name\":\"mralexgray/AGNSSplitView\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}\",\"pushed_at\":\"2013-02-26T00:32:32Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}\",\"created_at\":\"2013-04-17T00:10:13Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/merges\",\"mirror_url\":null,\"updated_at\":\"2013-04-17T00:10:13Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}\",\"description\":\"Simple NSSplitView additions.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":12767784,\"url\":\"https://api.github.com/repos/mralexgray/AGScopeBar\",\"fork\":true,\"name\":\"AGScopeBar\",\"size\":64,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AGScopeBar.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AGScopeBar.git\",\"svn_url\":\"https://github.com/mralexgray/AGScopeBar\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/AGScopeBar\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AGScopeBar.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/forks\",\"full_name\":\"mralexgray/AGScopeBar\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}\",\"pushed_at\":\"2013-05-07T03:35:29Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}\",\"created_at\":\"2013-09-11T21:06:54Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/merges\",\"mirror_url\":null,\"updated_at\":\"2013-09-11T21:06:54Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}\",\"description\":\"Custom scope bar implementation for Cocoa\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":31829499,\"url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin\",\"fork\":true,\"name\":\"agvtool-xcode-plugin\",\"size\":102,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/agvtool-xcode-plugin.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/agvtool-xcode-plugin.git\",\"svn_url\":\"https://github.com/mralexgray/agvtool-xcode-plugin\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/agvtool-xcode-plugin\",\"keys_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/agvtool-xcode-plugin.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks\",\"full_name\":\"mralexgray/agvtool-xcode-plugin\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}\",\"pushed_at\":\"2015-03-08T00:04:31Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}\",\"created_at\":\"2015-03-07T22:15:38Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges\",\"mirror_url\":null,\"updated_at\":\"2015-03-07T22:15:41Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}\",\"description\":\"this is a plugin wrapper for agvtool for xcode.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":9227846,\"url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser\",\"fork\":true,\"name\":\"AHContentBrowser\",\"size\":223,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AHContentBrowser.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk5MjI3ODQ2\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AHContentBrowser.git\",\"svn_url\":\"https://github.com/mralexgray/AHContentBrowser\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"\",\"html_url\":\"https://github.com/mralexgray/AHContentBrowser\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AHContentBrowser.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/forks\",\"full_name\":\"mralexgray/AHContentBrowser\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}\",\"pushed_at\":\"2013-03-13T17:38:23Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}\",\"created_at\":\"2013-04-04T20:56:16Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/merges\",\"mirror_url\":null,\"updated_at\":\"2015-10-22T05:00:24Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}\",\"description\":\"A Mac only webview that loads a fast readable version of the website if available.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":37430328,\"url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl\",\"fork\":true,\"name\":\"AHLaunchCtl\",\"size\":592,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AHLaunchCtl.git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AHLaunchCtl.git\",\"svn_url\":\"https://github.com/mralexgray/AHLaunchCtl\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"\",\"html_url\":\"https://github.com/mralexgray/AHLaunchCtl\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AHLaunchCtl.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/forks\",\"full_name\":\"mralexgray/AHLaunchCtl\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}\",\"pushed_at\":\"2015-05-26T18:50:48Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}\",\"created_at\":\"2015-06-14T21:31:03Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/merges\",\"mirror_url\":null,\"updated_at\":\"2015-06-14T21:31:04Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}\",\"description\":\"LaunchD Framework for Cocoa Apps\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":9167473,\"url\":\"https://api.github.com/repos/mralexgray/AHLayout\",\"fork\":true,\"name\":\"AHLayout\",\"size\":359,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AHLayout.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk5MTY3NDcz\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AHLayout.git\",\"svn_url\":\"https://github.com/mralexgray/AHLayout\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/AHLayout\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AHLayout/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AHLayout.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AHLayout/forks\",\"full_name\":\"mralexgray/AHLayout\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AHLayout/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}\",\"pushed_at\":\"2013-07-08T02:31:14Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AHLayout/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}\",\"created_at\":\"2013-04-02T10:10:30Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AHLayout/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AHLayout/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AHLayout/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AHLayout/merges\",\"mirror_url\":null,\"updated_at\":\"2013-07-08T02:31:17Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}\",\"description\":\"AHLayout\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AHLayout/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AHLayout/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AHLayout/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AHLayout/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AHLayout/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AHLayout/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AHLayout/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AHLayout/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AHLayout/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":18450201,\"url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework\",\"fork\":true,\"name\":\"Airmail-Plug-In-Framework\",\"size\":888,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Airmail-Plug-In-Framework.git\",\"license\":{\"key\":\"gpl-2.0\",\"url\":\"https://api.github.com/licenses/gpl-2.0\",\"name\":\"GNU General Public License v2.0\",\"node_id\":\"MDc6TGljZW5zZTg=\",\"spdx_id\":\"GPL-2.0\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Airmail-Plug-In-Framework.git\",\"svn_url\":\"https://github.com/mralexgray/Airmail-Plug-In-Framework\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/Airmail-Plug-In-Framework\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}\",\"language\":null,\"tags_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Airmail-Plug-In-Framework.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks\",\"full_name\":\"mralexgray/Airmail-Plug-In-Framework\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}\",\"pushed_at\":\"2014-03-27T15:42:19Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}\",\"created_at\":\"2014-04-04T19:33:54Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges\",\"mirror_url\":null,\"updated_at\":\"2014-11-23T19:31:04Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}\",\"description\":null,\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":5203219,\"url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API\",\"fork\":true,\"name\":\"AJS-iTunes-API\",\"size\":103,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AJS-iTunes-API.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk1MjAzMjE5\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AJS-iTunes-API.git\",\"svn_url\":\"https://github.com/mralexgray/AJS-iTunes-API\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"\",\"html_url\":\"https://github.com/mralexgray/AJS-iTunes-API\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags\",\"watchers\":2,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AJS-iTunes-API.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks\",\"full_name\":\"mralexgray/AJS-iTunes-API\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}\",\"pushed_at\":\"2011-10-30T22:26:48Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}\",\"created_at\":\"2012-07-27T10:20:58Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-11T11:00:05Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}\",\"description\":\"Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers\",\"watchers_count\":2,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}\",\"stargazers_count\":2,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":10093801,\"url\":\"https://api.github.com/repos/mralexgray/Alcatraz\",\"fork\":true,\"name\":\"Alcatraz\",\"size\":3668,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Alcatraz.git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Alcatraz.git\",\"svn_url\":\"https://github.com/mralexgray/Alcatraz\",\"archived\":false,\"disabled\":false,\"has_wiki\":false,\"homepage\":\"mneorr.github.com/Alcatraz\",\"html_url\":\"https://github.com/mralexgray/Alcatraz\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Alcatraz.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/forks\",\"full_name\":\"mralexgray/Alcatraz\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}\",\"pushed_at\":\"2014-03-19T12:50:37Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}\",\"created_at\":\"2013-05-16T04:41:13Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/merges\",\"mirror_url\":null,\"updated_at\":\"2014-03-19T20:38:35Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}\",\"description\":\"The most awesome (and only) Xcode package manager!\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":12916552,\"url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages\",\"fork\":true,\"name\":\"alcatraz-packages\",\"size\":826,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/alcatraz-packages.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/alcatraz-packages.git\",\"svn_url\":\"https://github.com/mralexgray/alcatraz-packages\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"mneorr.github.com/Alcatraz\",\"html_url\":\"https://github.com/mralexgray/alcatraz-packages\",\"keys_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}\",\"language\":\"Ruby\",\"tags_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/alcatraz-packages.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/forks\",\"full_name\":\"mralexgray/alcatraz-packages\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}\",\"pushed_at\":\"2015-12-14T16:21:31Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}\",\"created_at\":\"2013-09-18T07:15:24Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/merges\",\"mirror_url\":null,\"updated_at\":\"2015-11-10T20:52:30Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}\",\"description\":\"Package list repository for Alcatraz\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":44278362,\"url\":\"https://api.github.com/repos/mralexgray/alexicons\",\"fork\":true,\"name\":\"alexicons\",\"size\":257,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/alexicons.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/alexicons.git\",\"svn_url\":\"https://github.com/mralexgray/alexicons\",\"archived\":false,\"disabled\":false,\"has_wiki\":false,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/alexicons\",\"keys_url\":\"https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}\",\"language\":\"CoffeeScript\",\"tags_url\":\"https://api.github.com/repos/mralexgray/alexicons/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/alexicons.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/alexicons/forks\",\"full_name\":\"mralexgray/alexicons\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/alexicons/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/alexicons/pulls{/number}\",\"pushed_at\":\"2015-10-16T03:57:51Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/alexicons/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}\",\"created_at\":\"2015-10-14T21:49:39Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/alexicons/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/alexicons/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/alexicons/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/alexicons/merges\",\"mirror_url\":null,\"updated_at\":\"2015-10-15T06:20:08Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/alexicons/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}\",\"description\":\"Get popular cat names\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/alexicons/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/alexicons/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/alexicons/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/alexicons/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/alexicons/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/alexicons/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/alexicons/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/alexicons/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/alexicons/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/alexicons/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/alexicons/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/alexicons/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/alexicons/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":10476467,\"url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate\",\"fork\":true,\"name\":\"Alfred-Google-Translate\",\"size\":103,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Alfred-Google-Translate.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Alfred-Google-Translate.git\",\"svn_url\":\"https://github.com/mralexgray/Alfred-Google-Translate\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/Alfred-Google-Translate\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}\",\"language\":\"Shell\",\"tags_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Alfred-Google-Translate.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks\",\"full_name\":\"mralexgray/Alfred-Google-Translate\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}\",\"pushed_at\":\"2013-01-12T19:39:03Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}\",\"created_at\":\"2013-06-04T10:45:10Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges\",\"mirror_url\":null,\"updated_at\":\"2013-06-04T10:45:10Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}\",\"description\":\"Extension for Alfred that will do a Google translate for you\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":5524019,\"url\":\"https://api.github.com/repos/mralexgray/Amber\",\"fork\":false,\"name\":\"Amber\",\"size\":48,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Amber.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk1NTI0MDE5\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Amber.git\",\"svn_url\":\"https://github.com/mralexgray/Amber\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/Amber\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Amber/keys{/key_id}\",\"language\":null,\"tags_url\":\"https://api.github.com/repos/mralexgray/Amber/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Amber.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Amber/forks\",\"full_name\":\"mralexgray/Amber\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Amber/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Amber/pulls{/number}\",\"pushed_at\":\"2012-08-23T10:38:25Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Amber/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}\",\"created_at\":\"2012-08-23T10:38:24Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Amber/events\",\"has_issues\":true,\"issues_url\":\"https://api.github.com/repos/mralexgray/Amber/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Amber/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Amber/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-11T22:25:35Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Amber/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}\",\"description\":\"Fork of the difficult-to-deal-with Amber.framework\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Amber/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Amber/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Amber/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Amber/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Amber/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Amber/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Amber/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Amber/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Amber/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Amber/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Amber/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Amber/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Amber/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Amber/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Amber/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":10809060,\"url\":\"https://api.github.com/repos/mralexgray/Amethyst\",\"fork\":true,\"name\":\"Amethyst\",\"size\":12623,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Amethyst.git\",\"license\":{\"key\":\"mit\",\"url\":\"https://api.github.com/licenses/mit\",\"name\":\"MIT License\",\"node_id\":\"MDc6TGljZW5zZTEz\",\"spdx_id\":\"MIT\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Amethyst.git\",\"svn_url\":\"https://github.com/mralexgray/Amethyst\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://ianyh.github.io/Amethyst/\",\"html_url\":\"https://github.com/mralexgray/Amethyst\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/Amethyst/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Amethyst.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Amethyst/forks\",\"full_name\":\"mralexgray/Amethyst\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Amethyst/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}\",\"pushed_at\":\"2013-06-18T02:54:11Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Amethyst/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}\",\"created_at\":\"2013-06-20T00:34:22Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Amethyst/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Amethyst/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Amethyst/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Amethyst/merges\",\"mirror_url\":null,\"updated_at\":\"2013-06-20T00:34:22Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}\",\"description\":\"Tiling window manager for OS X.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Amethyst/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Amethyst/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Amethyst/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Amethyst/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Amethyst/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Amethyst/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Amethyst/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Amethyst/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Amethyst/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":3684286,\"url\":\"https://api.github.com/repos/mralexgray/Animated-Paths\",\"fork\":true,\"name\":\"Animated-Paths\",\"size\":411,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Animated-Paths.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkzNjg0Mjg2\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Animated-Paths.git\",\"svn_url\":\"https://github.com/mralexgray/Animated-Paths\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/\",\"html_url\":\"https://github.com/mralexgray/Animated-Paths\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/tags\",\"watchers\":2,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Animated-Paths.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/forks\",\"full_name\":\"mralexgray/Animated-Paths\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}\",\"pushed_at\":\"2010-12-30T20:56:51Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}\",\"created_at\":\"2012-03-11T02:56:38Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-08T04:12:21Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}\",\"description\":\"Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/stargazers\",\"watchers_count\":2,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}\",\"stargazers_count\":2,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":16662874,\"url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework\",\"fork\":true,\"name\":\"AnsiLove.framework\",\"size\":3780,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AnsiLove.framework.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AnsiLove.framework.git\",\"svn_url\":\"https://github.com/mralexgray/AnsiLove.framework\",\"archived\":false,\"disabled\":false,\"has_wiki\":false,\"homepage\":\"http://byteproject.net\",\"html_url\":\"https://github.com/mralexgray/AnsiLove.framework\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}\",\"language\":\"M\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AnsiLove.framework.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/forks\",\"full_name\":\"mralexgray/AnsiLove.framework\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}\",\"pushed_at\":\"2013-10-04T14:08:38Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}\",\"created_at\":\"2014-02-09T08:30:27Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/merges\",\"mirror_url\":null,\"updated_at\":\"2015-01-13T20:41:46Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}\",\"description\":\"Cocoa Framework for rendering ANSi / ASCII art\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":5189563,\"url\":\"https://api.github.com/repos/mralexgray/ANTrackBar\",\"fork\":true,\"name\":\"ANTrackBar\",\"size\":94,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/ANTrackBar.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnk1MTg5NTYz\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/ANTrackBar.git\",\"svn_url\":\"https://github.com/mralexgray/ANTrackBar\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"\",\"html_url\":\"https://github.com/mralexgray/ANTrackBar\",\"keys_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/tags\",\"watchers\":2,\"blobs_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/ANTrackBar.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/forks\",\"full_name\":\"mralexgray/ANTrackBar\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}\",\"pushed_at\":\"2012-03-09T01:40:02Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}\",\"created_at\":\"2012-07-26T08:17:22Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/merges\",\"mirror_url\":null,\"updated_at\":\"2013-01-11T10:29:56Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}\",\"description\":\"An easy-to-use Cocoa seek bar with a pleasing appearance\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/stargazers\",\"watchers_count\":2,\"deployments_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}\",\"stargazers_count\":2,\"subscription_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":16240152,\"url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C\",\"fork\":true,\"name\":\"AOP-in-Objective-C\",\"size\":340,\"forks\":1,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/AOP-in-Objective-C.git\",\"license\":null,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/AOP-in-Objective-C.git\",\"svn_url\":\"https://github.com/mralexgray/AOP-in-Objective-C\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":\"http://innoli.hu/en/opensource/\",\"html_url\":\"https://github.com/mralexgray/AOP-in-Objective-C\",\"keys_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}\",\"language\":\"Objective-C\",\"tags_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/AOP-in-Objective-C.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks\",\"full_name\":\"mralexgray/AOP-in-Objective-C\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}\",\"pushed_at\":\"2014-02-12T16:23:20Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}\",\"created_at\":\"2014-01-25T21:18:04Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges\",\"mirror_url\":null,\"updated_at\":\"2014-06-19T19:38:12Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}\",\"description\":\"An NSProxy based library for easily enabling AOP like functionality in Objective-C.\",\"forks_count\":1,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages\",\"default_branch\":\"travis-coveralls\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":13141936,\"url\":\"https://api.github.com/repos/mralexgray/Apaxy\",\"fork\":true,\"name\":\"Apaxy\",\"size\":113,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/Apaxy.git\",\"license\":{\"key\":\"unlicense\",\"url\":\"https://api.github.com/licenses/unlicense\",\"name\":\"The Unlicense\",\"node_id\":\"MDc6TGljZW5zZTE1\",\"spdx_id\":\"Unlicense\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/Apaxy.git\",\"svn_url\":\"https://github.com/mralexgray/Apaxy\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/Apaxy\",\"keys_url\":\"https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}\",\"language\":\"CSS\",\"tags_url\":\"https://api.github.com/repos/mralexgray/Apaxy/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/Apaxy.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/Apaxy/forks\",\"full_name\":\"mralexgray/Apaxy\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/Apaxy/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}\",\"pushed_at\":\"2013-08-02T16:01:32Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/Apaxy/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}\",\"created_at\":\"2013-09-27T05:05:35Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/Apaxy/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/Apaxy/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/Apaxy/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/Apaxy/merges\",\"mirror_url\":null,\"updated_at\":\"2018-02-16T21:40:24Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}\",\"description\":\"A simple, customisable theme for your Apache directory listing.\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/Apaxy/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/Apaxy/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/Apaxy/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/Apaxy/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/Apaxy/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/Apaxy/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/Apaxy/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/Apaxy/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/Apaxy/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false},{\"id\":20027360,\"url\":\"https://api.github.com/repos/mralexgray/app\",\"fork\":true,\"name\":\"app\",\"size\":1890,\"forks\":0,\"owner\":{\"id\":262517,\"url\":\"https://api.github.com/users/mralexgray\",\"type\":\"User\",\"login\":\"mralexgray\",\"node_id\":\"MDQ6VXNlcjI2MjUxNw==\",\"html_url\":\"https://github.com/mralexgray\",\"gists_url\":\"https://api.github.com/users/mralexgray/gists{/gist_id}\",\"repos_url\":\"https://api.github.com/users/mralexgray/repos\",\"avatar_url\":\"https://avatars.githubusercontent.com/u/262517?v=4\",\"events_url\":\"https://api.github.com/users/mralexgray/events{/privacy}\",\"site_admin\":false,\"gravatar_id\":\"\",\"starred_url\":\"https://api.github.com/users/mralexgray/starred{/owner}{/repo}\",\"followers_url\":\"https://api.github.com/users/mralexgray/followers\",\"following_url\":\"https://api.github.com/users/mralexgray/following{/other_user}\",\"organizations_url\":\"https://api.github.com/users/mralexgray/orgs\",\"subscriptions_url\":\"https://api.github.com/users/mralexgray/subscriptions\",\"received_events_url\":\"https://api.github.com/users/mralexgray/received_events\"},\"topics\":[],\"git_url\":\"git://github.com/mralexgray/app.git\",\"license\":{\"key\":\"other\",\"url\":null,\"name\":\"Other\",\"node_id\":\"MDc6TGljZW5zZTA=\",\"spdx_id\":\"NOASSERTION\"},\"node_id\":\"MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==\",\"private\":false,\"ssh_url\":\"git@github.com:mralexgray/app.git\",\"svn_url\":\"https://github.com/mralexgray/app\",\"archived\":false,\"disabled\":false,\"has_wiki\":true,\"homepage\":null,\"html_url\":\"https://github.com/mralexgray/app\",\"keys_url\":\"https://api.github.com/repos/mralexgray/app/keys{/key_id}\",\"language\":\"JavaScript\",\"tags_url\":\"https://api.github.com/repos/mralexgray/app/tags\",\"watchers\":0,\"blobs_url\":\"https://api.github.com/repos/mralexgray/app/git/blobs{/sha}\",\"clone_url\":\"https://github.com/mralexgray/app.git\",\"forks_url\":\"https://api.github.com/repos/mralexgray/app/forks\",\"full_name\":\"mralexgray/app\",\"has_pages\":false,\"hooks_url\":\"https://api.github.com/repos/mralexgray/app/hooks\",\"pulls_url\":\"https://api.github.com/repos/mralexgray/app/pulls{/number}\",\"pushed_at\":\"2014-05-20T19:51:38Z\",\"teams_url\":\"https://api.github.com/repos/mralexgray/app/teams\",\"trees_url\":\"https://api.github.com/repos/mralexgray/app/git/trees{/sha}\",\"created_at\":\"2014-05-21T15:54:20Z\",\"events_url\":\"https://api.github.com/repos/mralexgray/app/events\",\"has_issues\":false,\"issues_url\":\"https://api.github.com/repos/mralexgray/app/issues{/number}\",\"labels_url\":\"https://api.github.com/repos/mralexgray/app/labels{/name}\",\"merges_url\":\"https://api.github.com/repos/mralexgray/app/merges\",\"mirror_url\":null,\"updated_at\":\"2014-05-21T15:54:22Z\",\"visibility\":\"public\",\"archive_url\":\"https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}\",\"commits_url\":\"https://api.github.com/repos/mralexgray/app/commits{/sha}\",\"compare_url\":\"https://api.github.com/repos/mralexgray/app/compare/{base}...{head}\",\"description\":\"Instant mobile web app creation\",\"forks_count\":0,\"is_template\":false,\"open_issues\":0,\"branches_url\":\"https://api.github.com/repos/mralexgray/app/branches{/branch}\",\"comments_url\":\"https://api.github.com/repos/mralexgray/app/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/mralexgray/app/contents/{+path}\",\"git_refs_url\":\"https://api.github.com/repos/mralexgray/app/git/refs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/mralexgray/app/git/tags{/sha}\",\"has_projects\":true,\"releases_url\":\"https://api.github.com/repos/mralexgray/app/releases{/id}\",\"statuses_url\":\"https://api.github.com/repos/mralexgray/app/statuses/{sha}\",\"allow_forking\":true,\"assignees_url\":\"https://api.github.com/repos/mralexgray/app/assignees{/user}\",\"downloads_url\":\"https://api.github.com/repos/mralexgray/app/downloads\",\"has_downloads\":true,\"languages_url\":\"https://api.github.com/repos/mralexgray/app/languages\",\"default_branch\":\"master\",\"milestones_url\":\"https://api.github.com/repos/mralexgray/app/milestones{/number}\",\"stargazers_url\":\"https://api.github.com/repos/mralexgray/app/stargazers\",\"watchers_count\":0,\"deployments_url\":\"https://api.github.com/repos/mralexgray/app/deployments\",\"git_commits_url\":\"https://api.github.com/repos/mralexgray/app/git/commits{/sha}\",\"subscribers_url\":\"https://api.github.com/repos/mralexgray/app/subscribers\",\"contributors_url\":\"https://api.github.com/repos/mralexgray/app/contributors\",\"issue_events_url\":\"https://api.github.com/repos/mralexgray/app/issues/events{/number}\",\"stargazers_count\":0,\"subscription_url\":\"https://api.github.com/repos/mralexgray/app/subscription\",\"collaborators_url\":\"https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}\",\"issue_comment_url\":\"https://api.github.com/repos/mralexgray/app/issues/comments{/number}\",\"notifications_url\":\"https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}\",\"open_issues_count\":0,\"web_commit_signoff_required\":false}],\"name\":\"Shirt\",\"revenue\":4.99},\"receivedAt\":\"2022-08-18T08:43:13.521+05:30\",\"request_ip\":\"[::1]\",\"anonymousId\":\"anon-id-new\",\"originalTimestamp\":\"2022-08-18T08:43:15.539+05:30\"},{\"name\":\"Page View\",\"type\":\"page\",\"sentAt\":\"2022-08-18T08:43:15.539+05:30\",\"userId\":\"identified user id\",\"context\":{\"ip\":\"14.5.67.21\",\"library\":{\"name\":\"http\"}},\"rudderId\":\"daf823fb-e8d3-413a-8313-d34cd756f968\",\"messageId\":\"5f58d1f7-cbd6-4bff-8571-9933be7210b1\",\"timestamp\":\"2020-02-02T00:23:09.544Z\",\"properties\":{\"path\":\"/\",\"title\":\"Home\"},\"receivedAt\":\"2022-08-18T08:43:13.521+05:30\",\"request_ip\":\"[::1]\",\"anonymousId\":\"anon-id-new\",\"originalTimestamp\":\"2022-08-18T08:43:15.539+05:30\"}]", - "destConfig": { - "clientContext": "", - "lambda": "testFunction", - "invocationType": "Event" - } - }, - "metadata": [ - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 32, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "dc239cd1-bef4-4999-88e1-7332c64bf78c", - "JobID": 32, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "track", - "event": "Product Purchased new", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "9f8fb785-c720-4381-a009-bf22a13f4ced", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "name": "Shirt", - "revenue": 4.99 - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 48375, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "Product Purchased new", - "event_type": "track", - "message_id": "9f8fb785-c720-4381-a009-bf22a13f4ced", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 33, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "bf616af4-2c6b-495f-8b2d-b522c93bdca2", - "JobID": 33, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "name": "Page View", - "type": "page", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "5f58d1f7-cbd6-4bff-8571-9933be7210b1", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "path": "/", - "title": "Home" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 548, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "page", - "message_id": "5f58d1f7-cbd6-4bff-8571-9933be7210b1", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - } - ], - "batched": false, - "statusCode": 200 - }, - { - "batchedRequest": { - "payload": "[{\"name\":\"Screen View\",\"type\":\"screen\",\"sentAt\":\"2022-08-18T08:43:15.539+05:30\",\"userId\":\"identified user id\",\"context\":{\"ip\":\"14.5.67.21\",\"library\":{\"name\":\"http\"}},\"rudderId\":\"daf823fb-e8d3-413a-8313-d34cd756f968\",\"messageId\":\"1b8ee4c3-ffad-4457-b453-31b32da1dfea\",\"timestamp\":\"2020-02-02T00:23:09.544Z\",\"properties\":{\"prop1\":\"5\"},\"receivedAt\":\"2022-08-18T08:43:13.521+05:30\",\"request_ip\":\"[::1]\",\"anonymousId\":\"anon-id-new\",\"originalTimestamp\":\"2022-08-18T08:43:15.539+05:30\"},{\"type\":\"group\",\"sentAt\":\"2022-08-18T08:43:15.539+05:30\",\"traits\":{\"name\":\"Company\",\"industry\":\"Industry\",\"employees\":123},\"userId\":\"user123\",\"context\":{\"ip\":\"14.5.67.21\",\"traits\":{\"trait1\":\"new-val\"},\"library\":{\"name\":\"http\"}},\"groupId\":\"group1\",\"rudderId\":\"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5\",\"messageId\":\"2c59b527-3235-4fc2-9680-f41ec52ebb51\",\"timestamp\":\"2020-01-21T00:21:34.208Z\",\"receivedAt\":\"2022-08-18T08:43:13.521+05:30\",\"request_ip\":\"[::1]\",\"originalTimestamp\":\"2022-08-18T08:43:15.539+05:30\"}]", - "destConfig": { - "clientContext": "", - "lambda": "testFunction", - "invocationType": "Event" - } - }, - "metadata": [ - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 34, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "8faa9d6d-d8a8-468c-bef4-c2db52f6101b", - "JobID": 34, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "name": "Screen View", - "type": "screen", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "1b8ee4c3-ffad-4457-b453-31b32da1dfea", - "timestamp": "2020-02-02T00:23:09.544Z", - "properties": { - "prop1": "5" - }, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 536, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "screen", - "message_id": "1b8ee4c3-ffad-4457-b453-31b32da1dfea", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - }, - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 35, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "73cea314-998a-4b72-8004-34b0618093a3", - "JobID": 35, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "group", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "traits": { - "name": "Company", - "industry": "Industry", - "employees": 123 - }, - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "groupId": "group1", - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "2c59b527-3235-4fc2-9680-f41ec52ebb51", - "timestamp": "2020-01-21T00:21:34.208Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 589, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "group", - "message_id": "2c59b527-3235-4fc2-9680-f41ec52ebb51", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - } - ], - "batched": false, - "statusCode": 200 - }, - { - "batchedRequest": { - "payload": "[{\"type\":\"alias\",\"sentAt\":\"2022-08-18T08:43:15.539+05:30\",\"userId\":\"user123\",\"context\":{\"ip\":\"14.5.67.21\",\"traits\":{\"trait1\":\"new-val\"},\"library\":{\"name\":\"http\"}},\"rudderId\":\"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5\",\"messageId\":\"3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d\",\"timestamp\":\"2020-01-21T00:21:34.208Z\",\"previousId\":\"previd1\",\"receivedAt\":\"2022-08-18T08:43:13.521+05:30\",\"request_ip\":\"[::1]\",\"originalTimestamp\":\"2022-08-18T08:43:15.539+05:30\"}]", - "destConfig": { - "clientContext": "", - "lambda": "testFunction", - "invocationType": "Event" - } - }, - "metadata": [ - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 36, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "ac80629c-9eb6-4e92-bee8-4647e88f7fc0", - "JobID": 36, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "alias", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "user123", - "context": { - "ip": "14.5.67.21", - "traits": { - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5", - "messageId": "3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d", - "timestamp": "2020-01-21T00:21:34.208Z", - "previousId": "previd1", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 506, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "alias", - "message_id": "3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - } - ], - "batched": false, - "statusCode": 200 - }, - { - "metadata": [ - { - "userId": "anon-id-new<<>>identified user id", - "jobId": 31, - "sourceId": "2DTlLPQxignYp4ag9sISgGN2uY7", - "destinationId": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "attemptNum": 0, - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "createdAt": "2022-08-18T03:13:15.549Z", - "firstAttemptedAt": "", - "transformAt": "router", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "secret": null, - "jobsT": { - "UUID": "47b3937a-1fef-49fa-85c8-649673bd7170", - "JobID": 31, - "UserID": "anon-id-new<<>>identified user id", - "CreatedAt": "2022-08-18T03:13:15.549078Z", - "ExpireAt": "2022-08-18T03:13:15.549078Z", - "CustomVal": "LAMBDA", - "EventCount": 1, - "EventPayload": { - "type": "identify", - "sentAt": "2022-08-18T08:43:15.539+05:30", - "userId": "identified user id", - "context": { - "ip": "14.5.67.21", - "traits": { - "data": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "data2": [ - { - "id": 6104546, - "url": "https://api.github.com/repos/mralexgray/-REPONAME", - "fork": false, - "name": "-REPONAME", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/-REPONAME.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk2MTA0NTQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/-REPONAME.git", - "svn_url": "https://github.com/mralexgray/-REPONAME", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/-REPONAME", - "keys_url": "https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/-REPONAME.git", - "forks_url": "https://api.github.com/repos/mralexgray/-REPONAME/forks", - "full_name": "mralexgray/-REPONAME", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/-REPONAME/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}", - "pushed_at": "2012-10-06T16:37:39Z", - "teams_url": "https://api.github.com/repos/mralexgray/-REPONAME/teams", - "trees_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}", - "created_at": "2012-10-06T16:37:39Z", - "events_url": "https://api.github.com/repos/mralexgray/-REPONAME/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/-REPONAME/merges", - "mirror_url": null, - "updated_at": "2013-01-12T13:39:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/-REPONAME/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/-REPONAME/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/-REPONAME/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/-REPONAME/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/-REPONAME/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/-REPONAME/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 104510411, - "url": "https://api.github.com/repos/mralexgray/...", - "fork": true, - "name": "...", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/....git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=", - "private": false, - "ssh_url": "git@github.com:mralexgray/....git", - "svn_url": "https://github.com/mralexgray/...", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "https://driesvints.com/blog/getting-started-with-dotfiles", - "html_url": "https://github.com/mralexgray/...", - "keys_url": "https://api.github.com/repos/mralexgray/.../keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/.../tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/.../git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/....git", - "forks_url": "https://api.github.com/repos/mralexgray/.../forks", - "full_name": "mralexgray/...", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/.../hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/.../pulls{/number}", - "pushed_at": "2017-09-15T08:27:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/.../teams", - "trees_url": "https://api.github.com/repos/mralexgray/.../git/trees{/sha}", - "created_at": "2017-09-22T19:19:42Z", - "events_url": "https://api.github.com/repos/mralexgray/.../events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/.../issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/.../labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/.../merges", - "mirror_url": null, - "updated_at": "2017-09-22T19:20:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/.../commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/.../compare/{base}...{head}", - "description": ":computer: Public repo for my personal dotfiles.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/.../branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/.../comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/.../contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/.../git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/.../git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/.../releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/.../statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/.../assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/.../downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/.../languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/.../milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/.../stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/.../deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/.../git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/.../subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/.../contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/.../issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/.../subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/.../issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 58656723, - "url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol", - "fork": true, - "name": "2200087-Serial-Protocol", - "size": 41, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/2200087-Serial-Protocol.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/2200087-Serial-Protocol.git", - "svn_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://daviddworken.com", - "html_url": "https://github.com/mralexgray/2200087-Serial-Protocol", - "keys_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}", - "language": "Python", - "tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/2200087-Serial-Protocol.git", - "forks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks", - "full_name": "mralexgray/2200087-Serial-Protocol", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}", - "pushed_at": "2016-05-12T16:07:24Z", - "teams_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams", - "trees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}", - "created_at": "2016-05-12T16:05:28Z", - "events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges", - "mirror_url": null, - "updated_at": "2016-05-12T16:05:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}", - "description": "A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13121042, - "url": "https://api.github.com/repos/mralexgray/ace", - "fork": true, - "name": "ace", - "size": 21080, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ace.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ace.git", - "svn_url": "https://github.com/mralexgray/ace", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ace.c9.io", - "html_url": "https://github.com/mralexgray/ace", - "keys_url": "https://api.github.com/repos/mralexgray/ace/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/ace/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ace.git", - "forks_url": "https://api.github.com/repos/mralexgray/ace/forks", - "full_name": "mralexgray/ace", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ace/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ace/pulls{/number}", - "pushed_at": "2013-10-26T12:34:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/ace/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ace/git/trees{/sha}", - "created_at": "2013-09-26T11:58:10Z", - "events_url": "https://api.github.com/repos/mralexgray/ace/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ace/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ace/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ace/merges", - "mirror_url": null, - "updated_at": "2013-10-26T12:34:49Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ace/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}", - "description": "Ace (Ajax.org Cloud9 Editor)", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ace/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ace/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ace/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ace/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ace/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ace/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ace/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ace/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ace/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ace/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ace/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ace/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ace/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ace/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ace/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ace/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ace/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ace/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ace/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10791045, - "url": "https://api.github.com/repos/mralexgray/ACEView", - "fork": true, - "name": "ACEView", - "size": 1733, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ACEView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ACEView.git", - "svn_url": "https://github.com/mralexgray/ACEView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/ACEView", - "keys_url": "https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ACEView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ACEView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ACEView/forks", - "full_name": "mralexgray/ACEView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ACEView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ACEView/pulls{/number}", - "pushed_at": "2014-05-09T01:36:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/ACEView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}", - "created_at": "2013-06-19T12:15:04Z", - "events_url": "https://api.github.com/repos/mralexgray/ACEView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ACEView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ACEView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ACEView/merges", - "mirror_url": null, - "updated_at": "2015-11-24T01:14:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ACEView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}", - "description": "Use the wonderful ACE editor in your Cocoa applications", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ACEView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ACEView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ACEView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ACEView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ACEView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ACEView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ACEView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ACEView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ACEView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ACEView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ACEView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ACEView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ACEView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13623648, - "url": "https://api.github.com/repos/mralexgray/ActiveLog", - "fork": true, - "name": "ActiveLog", - "size": 60, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ActiveLog.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ActiveLog.git", - "svn_url": "https://github.com/mralexgray/ActiveLog", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://deepitpro.com/en/articles/ActiveLog/info/", - "html_url": "https://github.com/mralexgray/ActiveLog", - "keys_url": "https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ActiveLog.git", - "forks_url": "https://api.github.com/repos/mralexgray/ActiveLog/forks", - "full_name": "mralexgray/ActiveLog", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ActiveLog/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}", - "pushed_at": "2011-07-03T06:28:59Z", - "teams_url": "https://api.github.com/repos/mralexgray/ActiveLog/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}", - "created_at": "2013-10-16T15:52:37Z", - "events_url": "https://api.github.com/repos/mralexgray/ActiveLog/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ActiveLog/merges", - "mirror_url": null, - "updated_at": "2013-10-16T15:52:37Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}", - "description": "Shut up all logs with active filter.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ActiveLog/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ActiveLog/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ActiveLog/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ActiveLog/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ActiveLog/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ActiveLog/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9716210, - "url": "https://api.github.com/repos/mralexgray/adium", - "fork": false, - "name": "adium", - "size": 277719, - "forks": 37, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/adium.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk5NzE2MjEw", - "private": false, - "ssh_url": "git@github.com:mralexgray/adium.git", - "svn_url": "https://github.com/mralexgray/adium", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/adium", - "keys_url": "https://api.github.com/repos/mralexgray/adium/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/adium/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/adium.git", - "forks_url": "https://api.github.com/repos/mralexgray/adium/forks", - "full_name": "mralexgray/adium", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/adium/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/adium/pulls{/number}", - "pushed_at": "2013-04-26T16:43:53Z", - "teams_url": "https://api.github.com/repos/mralexgray/adium/teams", - "trees_url": "https://api.github.com/repos/mralexgray/adium/git/trees{/sha}", - "created_at": "2013-04-27T14:59:33Z", - "events_url": "https://api.github.com/repos/mralexgray/adium/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/adium/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/adium/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/adium/merges", - "mirror_url": null, - "updated_at": "2019-12-11T06:51:45Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/adium/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}", - "description": "Official mirror of hg.adium.im", - "forks_count": 37, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/adium/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/adium/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/adium/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/adium/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/adium/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/adium/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/adium/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/adium/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/adium/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/adium/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/adium/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/adium/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/adium/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/adium/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/adium/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/adium/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/adium/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/adium/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/adium/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12752329, - "url": "https://api.github.com/repos/mralexgray/ADLivelyTableView", - "fork": true, - "name": "ADLivelyTableView", - "size": 73, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ADLivelyTableView.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/ADLivelyTableView.git", - "svn_url": "https://github.com/mralexgray/ADLivelyTableView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://applidium.com/en/news/lively_uitableview/", - "html_url": "https://github.com/mralexgray/ADLivelyTableView", - "keys_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ADLivelyTableView.git", - "forks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/forks", - "full_name": "mralexgray/ADLivelyTableView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}", - "pushed_at": "2012-05-10T10:40:15Z", - "teams_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}", - "created_at": "2013-09-11T09:18:01Z", - "events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/merges", - "mirror_url": null, - "updated_at": "2013-09-11T09:18:03Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}", - "description": "Lively UITableView", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5697379, - "url": "https://api.github.com/repos/mralexgray/AFIncrementalStore", - "fork": true, - "name": "AFIncrementalStore", - "size": 139, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFIncrementalStore.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk1Njk3Mzc5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFIncrementalStore.git", - "svn_url": "https://github.com/mralexgray/AFIncrementalStore", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AFIncrementalStore", - "keys_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFIncrementalStore.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/forks", - "full_name": "mralexgray/AFIncrementalStore", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}", - "pushed_at": "2012-09-01T22:46:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}", - "created_at": "2012-09-06T04:20:33Z", - "events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/merges", - "mirror_url": null, - "updated_at": "2013-01-12T03:15:29Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}", - "description": "Core Data Persistence with AFNetworking, Done Right", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 6969621, - "url": "https://api.github.com/repos/mralexgray/AFNetworking", - "fork": true, - "name": "AFNetworking", - "size": 4341, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AFNetworking.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnk2OTY5NjIx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AFNetworking.git", - "svn_url": "https://github.com/mralexgray/AFNetworking", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://afnetworking.com", - "html_url": "https://github.com/mralexgray/AFNetworking", - "keys_url": "https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AFNetworking.git", - "forks_url": "https://api.github.com/repos/mralexgray/AFNetworking/forks", - "full_name": "mralexgray/AFNetworking", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AFNetworking/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}", - "pushed_at": "2014-01-24T07:14:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AFNetworking/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}", - "created_at": "2012-12-02T17:00:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AFNetworking/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AFNetworking/merges", - "mirror_url": null, - "updated_at": "2014-01-24T07:14:33Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}", - "description": "A delightful iOS and OS X networking framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AFNetworking/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AFNetworking/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AFNetworking/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AFNetworking/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AFNetworking/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AFNetworking/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9485541, - "url": "https://api.github.com/repos/mralexgray/AGNSSplitView", - "fork": true, - "name": "AGNSSplitView", - "size": 68, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGNSSplitView.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5NDg1NTQx", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGNSSplitView.git", - "svn_url": "https://github.com/mralexgray/AGNSSplitView", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGNSSplitView", - "keys_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGNSSplitView.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/forks", - "full_name": "mralexgray/AGNSSplitView", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}", - "pushed_at": "2013-02-26T00:32:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}", - "created_at": "2013-04-17T00:10:13Z", - "events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/merges", - "mirror_url": null, - "updated_at": "2013-04-17T00:10:13Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}", - "description": "Simple NSSplitView additions.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12767784, - "url": "https://api.github.com/repos/mralexgray/AGScopeBar", - "fork": true, - "name": "AGScopeBar", - "size": 64, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AGScopeBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AGScopeBar.git", - "svn_url": "https://github.com/mralexgray/AGScopeBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AGScopeBar", - "keys_url": "https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AGScopeBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/forks", - "full_name": "mralexgray/AGScopeBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AGScopeBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}", - "pushed_at": "2013-05-07T03:35:29Z", - "teams_url": "https://api.github.com/repos/mralexgray/AGScopeBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}", - "created_at": "2013-09-11T21:06:54Z", - "events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AGScopeBar/merges", - "mirror_url": null, - "updated_at": "2013-09-11T21:06:54Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}", - "description": "Custom scope bar implementation for Cocoa", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AGScopeBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AGScopeBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AGScopeBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AGScopeBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AGScopeBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 31829499, - "url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin", - "fork": true, - "name": "agvtool-xcode-plugin", - "size": 102, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/agvtool-xcode-plugin.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/agvtool-xcode-plugin.git", - "svn_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/agvtool-xcode-plugin", - "keys_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/agvtool-xcode-plugin.git", - "forks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks", - "full_name": "mralexgray/agvtool-xcode-plugin", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}", - "pushed_at": "2015-03-08T00:04:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams", - "trees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}", - "created_at": "2015-03-07T22:15:38Z", - "events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges", - "mirror_url": null, - "updated_at": "2015-03-07T22:15:41Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}", - "description": "this is a plugin wrapper for agvtool for xcode.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9227846, - "url": "https://api.github.com/repos/mralexgray/AHContentBrowser", - "fork": true, - "name": "AHContentBrowser", - "size": 223, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHContentBrowser.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MjI3ODQ2", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHContentBrowser.git", - "svn_url": "https://github.com/mralexgray/AHContentBrowser", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHContentBrowser", - "keys_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHContentBrowser.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/forks", - "full_name": "mralexgray/AHContentBrowser", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}", - "pushed_at": "2013-03-13T17:38:23Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}", - "created_at": "2013-04-04T20:56:16Z", - "events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/merges", - "mirror_url": null, - "updated_at": "2015-10-22T05:00:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}", - "description": "A Mac only webview that loads a fast readable version of the website if available.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 37430328, - "url": "https://api.github.com/repos/mralexgray/AHLaunchCtl", - "fork": true, - "name": "AHLaunchCtl", - "size": 592, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLaunchCtl.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLaunchCtl.git", - "svn_url": "https://github.com/mralexgray/AHLaunchCtl", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AHLaunchCtl", - "keys_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLaunchCtl.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/forks", - "full_name": "mralexgray/AHLaunchCtl", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}", - "pushed_at": "2015-05-26T18:50:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}", - "created_at": "2015-06-14T21:31:03Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/merges", - "mirror_url": null, - "updated_at": "2015-06-14T21:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}", - "description": "LaunchD Framework for Cocoa Apps", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 9167473, - "url": "https://api.github.com/repos/mralexgray/AHLayout", - "fork": true, - "name": "AHLayout", - "size": 359, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AHLayout.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk5MTY3NDcz", - "private": false, - "ssh_url": "git@github.com:mralexgray/AHLayout.git", - "svn_url": "https://github.com/mralexgray/AHLayout", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/AHLayout", - "keys_url": "https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AHLayout/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AHLayout.git", - "forks_url": "https://api.github.com/repos/mralexgray/AHLayout/forks", - "full_name": "mralexgray/AHLayout", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AHLayout/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}", - "pushed_at": "2013-07-08T02:31:14Z", - "teams_url": "https://api.github.com/repos/mralexgray/AHLayout/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}", - "created_at": "2013-04-02T10:10:30Z", - "events_url": "https://api.github.com/repos/mralexgray/AHLayout/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AHLayout/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AHLayout/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AHLayout/merges", - "mirror_url": null, - "updated_at": "2013-07-08T02:31:17Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}", - "description": "AHLayout", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AHLayout/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AHLayout/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AHLayout/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AHLayout/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AHLayout/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AHLayout/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AHLayout/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AHLayout/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AHLayout/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 18450201, - "url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework", - "fork": true, - "name": "Airmail-Plug-In-Framework", - "size": 888, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "license": { - "key": "gpl-2.0", - "url": "https://api.github.com/licenses/gpl-2.0", - "name": "GNU General Public License v2.0", - "node_id": "MDc6TGljZW5zZTg=", - "spdx_id": "GPL-2.0" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Airmail-Plug-In-Framework.git", - "svn_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework", - "keys_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Airmail-Plug-In-Framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks", - "full_name": "mralexgray/Airmail-Plug-In-Framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}", - "pushed_at": "2014-03-27T15:42:19Z", - "teams_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}", - "created_at": "2014-04-04T19:33:54Z", - "events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges", - "mirror_url": null, - "updated_at": "2014-11-23T19:31:04Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}", - "description": null, - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5203219, - "url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API", - "fork": true, - "name": "AJS-iTunes-API", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AJS-iTunes-API.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MjAzMjE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/AJS-iTunes-API.git", - "svn_url": "https://github.com/mralexgray/AJS-iTunes-API", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/AJS-iTunes-API", - "keys_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AJS-iTunes-API.git", - "forks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks", - "full_name": "mralexgray/AJS-iTunes-API", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}", - "pushed_at": "2011-10-30T22:26:48Z", - "teams_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}", - "created_at": "2012-07-27T10:20:58Z", - "events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges", - "mirror_url": null, - "updated_at": "2013-01-11T11:00:05Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}", - "description": "Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10093801, - "url": "https://api.github.com/repos/mralexgray/Alcatraz", - "fork": true, - "name": "Alcatraz", - "size": 3668, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alcatraz.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alcatraz.git", - "svn_url": "https://github.com/mralexgray/Alcatraz", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/Alcatraz", - "keys_url": "https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alcatraz.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alcatraz/forks", - "full_name": "mralexgray/Alcatraz", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alcatraz/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}", - "pushed_at": "2014-03-19T12:50:37Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alcatraz/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}", - "created_at": "2013-05-16T04:41:13Z", - "events_url": "https://api.github.com/repos/mralexgray/Alcatraz/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alcatraz/merges", - "mirror_url": null, - "updated_at": "2014-03-19T20:38:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}", - "description": "The most awesome (and only) Xcode package manager!", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alcatraz/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alcatraz/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alcatraz/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alcatraz/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alcatraz/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alcatraz/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 12916552, - "url": "https://api.github.com/repos/mralexgray/alcatraz-packages", - "fork": true, - "name": "alcatraz-packages", - "size": 826, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alcatraz-packages.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alcatraz-packages.git", - "svn_url": "https://github.com/mralexgray/alcatraz-packages", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "mneorr.github.com/Alcatraz", - "html_url": "https://github.com/mralexgray/alcatraz-packages", - "keys_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}", - "language": "Ruby", - "tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alcatraz-packages.git", - "forks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/forks", - "full_name": "mralexgray/alcatraz-packages", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}", - "pushed_at": "2015-12-14T16:21:31Z", - "teams_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}", - "created_at": "2013-09-18T07:15:24Z", - "events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/merges", - "mirror_url": null, - "updated_at": "2015-11-10T20:52:30Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}", - "description": "Package list repository for Alcatraz", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 44278362, - "url": "https://api.github.com/repos/mralexgray/alexicons", - "fork": true, - "name": "alexicons", - "size": 257, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/alexicons.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/alexicons.git", - "svn_url": "https://github.com/mralexgray/alexicons", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": null, - "html_url": "https://github.com/mralexgray/alexicons", - "keys_url": "https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}", - "language": "CoffeeScript", - "tags_url": "https://api.github.com/repos/mralexgray/alexicons/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/alexicons.git", - "forks_url": "https://api.github.com/repos/mralexgray/alexicons/forks", - "full_name": "mralexgray/alexicons", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/alexicons/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/alexicons/pulls{/number}", - "pushed_at": "2015-10-16T03:57:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/alexicons/teams", - "trees_url": "https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}", - "created_at": "2015-10-14T21:49:39Z", - "events_url": "https://api.github.com/repos/mralexgray/alexicons/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/alexicons/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/alexicons/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/alexicons/merges", - "mirror_url": null, - "updated_at": "2015-10-15T06:20:08Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/alexicons/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}", - "description": "Get popular cat names", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/alexicons/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/alexicons/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/alexicons/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/alexicons/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/alexicons/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/alexicons/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/alexicons/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/alexicons/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/alexicons/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/alexicons/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/alexicons/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/alexicons/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/alexicons/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10476467, - "url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate", - "fork": true, - "name": "Alfred-Google-Translate", - "size": 103, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Alfred-Google-Translate.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Alfred-Google-Translate.git", - "svn_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Alfred-Google-Translate", - "keys_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}", - "language": "Shell", - "tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Alfred-Google-Translate.git", - "forks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks", - "full_name": "mralexgray/Alfred-Google-Translate", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}", - "pushed_at": "2013-01-12T19:39:03Z", - "teams_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}", - "created_at": "2013-06-04T10:45:10Z", - "events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges", - "mirror_url": null, - "updated_at": "2013-06-04T10:45:10Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}", - "description": "Extension for Alfred that will do a Google translate for you", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5524019, - "url": "https://api.github.com/repos/mralexgray/Amber", - "fork": false, - "name": "Amber", - "size": 48, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amber.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1NTI0MDE5", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amber.git", - "svn_url": "https://github.com/mralexgray/Amber", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Amber", - "keys_url": "https://api.github.com/repos/mralexgray/Amber/keys{/key_id}", - "language": null, - "tags_url": "https://api.github.com/repos/mralexgray/Amber/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amber.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amber/forks", - "full_name": "mralexgray/Amber", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amber/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amber/pulls{/number}", - "pushed_at": "2012-08-23T10:38:25Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amber/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}", - "created_at": "2012-08-23T10:38:24Z", - "events_url": "https://api.github.com/repos/mralexgray/Amber/events", - "has_issues": true, - "issues_url": "https://api.github.com/repos/mralexgray/Amber/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amber/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amber/merges", - "mirror_url": null, - "updated_at": "2013-01-11T22:25:35Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amber/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}", - "description": "Fork of the difficult-to-deal-with Amber.framework", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amber/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amber/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amber/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amber/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amber/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amber/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amber/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amber/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amber/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amber/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amber/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amber/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amber/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amber/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amber/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 10809060, - "url": "https://api.github.com/repos/mralexgray/Amethyst", - "fork": true, - "name": "Amethyst", - "size": 12623, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Amethyst.git", - "license": { - "key": "mit", - "url": "https://api.github.com/licenses/mit", - "name": "MIT License", - "node_id": "MDc6TGljZW5zZTEz", - "spdx_id": "MIT" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Amethyst.git", - "svn_url": "https://github.com/mralexgray/Amethyst", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://ianyh.github.io/Amethyst/", - "html_url": "https://github.com/mralexgray/Amethyst", - "keys_url": "https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Amethyst/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Amethyst.git", - "forks_url": "https://api.github.com/repos/mralexgray/Amethyst/forks", - "full_name": "mralexgray/Amethyst", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Amethyst/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}", - "pushed_at": "2013-06-18T02:54:11Z", - "teams_url": "https://api.github.com/repos/mralexgray/Amethyst/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}", - "created_at": "2013-06-20T00:34:22Z", - "events_url": "https://api.github.com/repos/mralexgray/Amethyst/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Amethyst/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Amethyst/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Amethyst/merges", - "mirror_url": null, - "updated_at": "2013-06-20T00:34:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}", - "description": "Tiling window manager for OS X.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Amethyst/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Amethyst/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Amethyst/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Amethyst/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Amethyst/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Amethyst/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Amethyst/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Amethyst/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Amethyst/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 3684286, - "url": "https://api.github.com/repos/mralexgray/Animated-Paths", - "fork": true, - "name": "Animated-Paths", - "size": 411, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Animated-Paths.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkzNjg0Mjg2", - "private": false, - "ssh_url": "git@github.com:mralexgray/Animated-Paths.git", - "svn_url": "https://github.com/mralexgray/Animated-Paths", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/", - "html_url": "https://github.com/mralexgray/Animated-Paths", - "keys_url": "https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Animated-Paths.git", - "forks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/forks", - "full_name": "mralexgray/Animated-Paths", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Animated-Paths/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}", - "pushed_at": "2010-12-30T20:56:51Z", - "teams_url": "https://api.github.com/repos/mralexgray/Animated-Paths/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}", - "created_at": "2012-03-11T02:56:38Z", - "events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Animated-Paths/merges", - "mirror_url": null, - "updated_at": "2013-01-08T04:12:21Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}", - "description": "Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Animated-Paths/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Animated-Paths/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/Animated-Paths/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Animated-Paths/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/Animated-Paths/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16662874, - "url": "https://api.github.com/repos/mralexgray/AnsiLove.framework", - "fork": true, - "name": "AnsiLove.framework", - "size": 3780, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AnsiLove.framework.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AnsiLove.framework.git", - "svn_url": "https://github.com/mralexgray/AnsiLove.framework", - "archived": false, - "disabled": false, - "has_wiki": false, - "homepage": "http://byteproject.net", - "html_url": "https://github.com/mralexgray/AnsiLove.framework", - "keys_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}", - "language": "M", - "tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AnsiLove.framework.git", - "forks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/forks", - "full_name": "mralexgray/AnsiLove.framework", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}", - "pushed_at": "2013-10-04T14:08:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}", - "created_at": "2014-02-09T08:30:27Z", - "events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/merges", - "mirror_url": null, - "updated_at": "2015-01-13T20:41:46Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}", - "description": "Cocoa Framework for rendering ANSi / ASCII art", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 5189563, - "url": "https://api.github.com/repos/mralexgray/ANTrackBar", - "fork": true, - "name": "ANTrackBar", - "size": 94, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/ANTrackBar.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnk1MTg5NTYz", - "private": false, - "ssh_url": "git@github.com:mralexgray/ANTrackBar.git", - "svn_url": "https://github.com/mralexgray/ANTrackBar", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "", - "html_url": "https://github.com/mralexgray/ANTrackBar", - "keys_url": "https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/tags", - "watchers": 2, - "blobs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/ANTrackBar.git", - "forks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/forks", - "full_name": "mralexgray/ANTrackBar", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/ANTrackBar/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}", - "pushed_at": "2012-03-09T01:40:02Z", - "teams_url": "https://api.github.com/repos/mralexgray/ANTrackBar/teams", - "trees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}", - "created_at": "2012-07-26T08:17:22Z", - "events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/ANTrackBar/merges", - "mirror_url": null, - "updated_at": "2013-01-11T10:29:56Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}", - "description": "An easy-to-use Cocoa seek bar with a pleasing appearance", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/ANTrackBar/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/ANTrackBar/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/stargazers", - "watchers_count": 2, - "deployments_url": "https://api.github.com/repos/mralexgray/ANTrackBar/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/ANTrackBar/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}", - "stargazers_count": 2, - "subscription_url": "https://api.github.com/repos/mralexgray/ANTrackBar/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 16240152, - "url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C", - "fork": true, - "name": "AOP-in-Objective-C", - "size": 340, - "forks": 1, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/AOP-in-Objective-C.git", - "license": null, - "node_id": "MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/AOP-in-Objective-C.git", - "svn_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": "http://innoli.hu/en/opensource/", - "html_url": "https://github.com/mralexgray/AOP-in-Objective-C", - "keys_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}", - "language": "Objective-C", - "tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/AOP-in-Objective-C.git", - "forks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks", - "full_name": "mralexgray/AOP-in-Objective-C", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}", - "pushed_at": "2014-02-12T16:23:20Z", - "teams_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams", - "trees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}", - "created_at": "2014-01-25T21:18:04Z", - "events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges", - "mirror_url": null, - "updated_at": "2014-06-19T19:38:12Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}", - "description": "An NSProxy based library for easily enabling AOP like functionality in Objective-C.", - "forks_count": 1, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages", - "default_branch": "travis-coveralls", - "milestones_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 13141936, - "url": "https://api.github.com/repos/mralexgray/Apaxy", - "fork": true, - "name": "Apaxy", - "size": 113, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/Apaxy.git", - "license": { - "key": "unlicense", - "url": "https://api.github.com/licenses/unlicense", - "name": "The Unlicense", - "node_id": "MDc6TGljZW5zZTE1", - "spdx_id": "Unlicense" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==", - "private": false, - "ssh_url": "git@github.com:mralexgray/Apaxy.git", - "svn_url": "https://github.com/mralexgray/Apaxy", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/Apaxy", - "keys_url": "https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}", - "language": "CSS", - "tags_url": "https://api.github.com/repos/mralexgray/Apaxy/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/Apaxy.git", - "forks_url": "https://api.github.com/repos/mralexgray/Apaxy/forks", - "full_name": "mralexgray/Apaxy", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/Apaxy/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}", - "pushed_at": "2013-08-02T16:01:32Z", - "teams_url": "https://api.github.com/repos/mralexgray/Apaxy/teams", - "trees_url": "https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}", - "created_at": "2013-09-27T05:05:35Z", - "events_url": "https://api.github.com/repos/mralexgray/Apaxy/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/Apaxy/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/Apaxy/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/Apaxy/merges", - "mirror_url": null, - "updated_at": "2018-02-16T21:40:24Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}", - "description": "A simple, customisable theme for your Apache directory listing.", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/Apaxy/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/Apaxy/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/Apaxy/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/Apaxy/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/Apaxy/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/Apaxy/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/Apaxy/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/Apaxy/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/Apaxy/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - }, - { - "id": 20027360, - "url": "https://api.github.com/repos/mralexgray/app", - "fork": true, - "name": "app", - "size": 1890, - "forks": 0, - "owner": { - "id": 262517, - "url": "https://api.github.com/users/mralexgray", - "type": "User", - "login": "mralexgray", - "node_id": "MDQ6VXNlcjI2MjUxNw==", - "html_url": "https://github.com/mralexgray", - "gists_url": "https://api.github.com/users/mralexgray/gists{/gist_id}", - "repos_url": "https://api.github.com/users/mralexgray/repos", - "avatar_url": "https://avatars.githubusercontent.com/u/262517?v=4", - "events_url": "https://api.github.com/users/mralexgray/events{/privacy}", - "site_admin": false, - "gravatar_id": "", - "starred_url": "https://api.github.com/users/mralexgray/starred{/owner}{/repo}", - "followers_url": "https://api.github.com/users/mralexgray/followers", - "following_url": "https://api.github.com/users/mralexgray/following{/other_user}", - "organizations_url": "https://api.github.com/users/mralexgray/orgs", - "subscriptions_url": "https://api.github.com/users/mralexgray/subscriptions", - "received_events_url": "https://api.github.com/users/mralexgray/received_events" - }, - "topics": [], - "git_url": "git://github.com/mralexgray/app.git", - "license": { - "key": "other", - "url": null, - "name": "Other", - "node_id": "MDc6TGljZW5zZTA=", - "spdx_id": "NOASSERTION" - }, - "node_id": "MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==", - "private": false, - "ssh_url": "git@github.com:mralexgray/app.git", - "svn_url": "https://github.com/mralexgray/app", - "archived": false, - "disabled": false, - "has_wiki": true, - "homepage": null, - "html_url": "https://github.com/mralexgray/app", - "keys_url": "https://api.github.com/repos/mralexgray/app/keys{/key_id}", - "language": "JavaScript", - "tags_url": "https://api.github.com/repos/mralexgray/app/tags", - "watchers": 0, - "blobs_url": "https://api.github.com/repos/mralexgray/app/git/blobs{/sha}", - "clone_url": "https://github.com/mralexgray/app.git", - "forks_url": "https://api.github.com/repos/mralexgray/app/forks", - "full_name": "mralexgray/app", - "has_pages": false, - "hooks_url": "https://api.github.com/repos/mralexgray/app/hooks", - "pulls_url": "https://api.github.com/repos/mralexgray/app/pulls{/number}", - "pushed_at": "2014-05-20T19:51:38Z", - "teams_url": "https://api.github.com/repos/mralexgray/app/teams", - "trees_url": "https://api.github.com/repos/mralexgray/app/git/trees{/sha}", - "created_at": "2014-05-21T15:54:20Z", - "events_url": "https://api.github.com/repos/mralexgray/app/events", - "has_issues": false, - "issues_url": "https://api.github.com/repos/mralexgray/app/issues{/number}", - "labels_url": "https://api.github.com/repos/mralexgray/app/labels{/name}", - "merges_url": "https://api.github.com/repos/mralexgray/app/merges", - "mirror_url": null, - "updated_at": "2014-05-21T15:54:22Z", - "visibility": "public", - "archive_url": "https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}", - "commits_url": "https://api.github.com/repos/mralexgray/app/commits{/sha}", - "compare_url": "https://api.github.com/repos/mralexgray/app/compare/{base}...{head}", - "description": "Instant mobile web app creation", - "forks_count": 0, - "is_template": false, - "open_issues": 0, - "branches_url": "https://api.github.com/repos/mralexgray/app/branches{/branch}", - "comments_url": "https://api.github.com/repos/mralexgray/app/comments{/number}", - "contents_url": "https://api.github.com/repos/mralexgray/app/contents/{+path}", - "git_refs_url": "https://api.github.com/repos/mralexgray/app/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/mralexgray/app/git/tags{/sha}", - "has_projects": true, - "releases_url": "https://api.github.com/repos/mralexgray/app/releases{/id}", - "statuses_url": "https://api.github.com/repos/mralexgray/app/statuses/{sha}", - "allow_forking": true, - "assignees_url": "https://api.github.com/repos/mralexgray/app/assignees{/user}", - "downloads_url": "https://api.github.com/repos/mralexgray/app/downloads", - "has_downloads": true, - "languages_url": "https://api.github.com/repos/mralexgray/app/languages", - "default_branch": "master", - "milestones_url": "https://api.github.com/repos/mralexgray/app/milestones{/number}", - "stargazers_url": "https://api.github.com/repos/mralexgray/app/stargazers", - "watchers_count": 0, - "deployments_url": "https://api.github.com/repos/mralexgray/app/deployments", - "git_commits_url": "https://api.github.com/repos/mralexgray/app/git/commits{/sha}", - "subscribers_url": "https://api.github.com/repos/mralexgray/app/subscribers", - "contributors_url": "https://api.github.com/repos/mralexgray/app/contributors", - "issue_events_url": "https://api.github.com/repos/mralexgray/app/issues/events{/number}", - "stargazers_count": 0, - "subscription_url": "https://api.github.com/repos/mralexgray/app/subscription", - "collaborators_url": "https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}", - "issue_comment_url": "https://api.github.com/repos/mralexgray/app/issues/comments{/number}", - "notifications_url": "https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}", - "open_issues_count": 0, - "web_commit_signoff_required": false - } - ], - "trait1": "new-val" - }, - "library": { - "name": "http" - } - }, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "messageId": "c864b4cd-8f07-4922-b3d0-82ef04c987d3", - "timestamp": "2020-02-02T00:23:09.544Z", - "receivedAt": "2022-08-18T08:43:13.521+05:30", - "request_ip": "[::1]", - "anonymousId": "anon-id-new", - "originalTimestamp": "2022-08-18T08:43:15.539+05:30" - }, - "PayloadSize": 95943, - "LastJobStatus": { - "JobID": 0, - "JobState": "", - "AttemptNum": 0, - "ExecTime": "0001-01-01T00:00:00Z", - "RetryTime": "0001-01-01T00:00:00Z", - "ErrorCode": "", - "ErrorResponse": null, - "Parameters": null, - "WorkspaceId": "" - }, - "Parameters": { - "record_id": null, - "source_id": "2DTlLPQxignYp4ag9sISgGN2uY7", - "event_name": "", - "event_type": "identify", - "message_id": "c864b4cd-8f07-4922-b3d0-82ef04c987d3", - "received_at": "2022-08-18T08:43:13.521+05:30", - "workspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd", - "transform_at": "router", - "source_job_id": "", - "destination_id": "2DTozIMGtBwTGNJtuvdPByFSL2Z", - "gateway_job_id": 6, - "source_task_id": "", - "source_batch_id": "", - "source_category": "", - "source_job_run_id": "", - "source_task_run_id": "", - "source_definition_id": "2DTlJaW1jHhM8B27Et2CMTZoxZF", - "destination_definition_id": "" - }, - "WorkspaceId": "2DTlBMipxWfJZzZ1SsjELQWvkwd" - }, - "workerAssignedTime": "2022-08-18T08:43:16.586825+05:30" - } - ], - "batched": false, - "statusCode": 400, - "error": "payload size limit exceeded" - } -] diff --git a/test/__tests__/data/launchdarkly_audience.json b/test/__tests__/data/launchdarkly_audience.json deleted file mode 100644 index 2f348e01fa..0000000000 --- a/test/__tests__/data/launchdarkly_audience.json +++ /dev/null @@ -1,495 +0,0 @@ -[ - { - "description": "Unsupported event type", - "input": { - "message": { - "userId": "user123", - "type": "abc", - "properties": { - "listData": { - "add": [ - { - "identifier": "alex@email.com" - }, - { - "identifier": "ryan@email.com" - }, - { - "identifier": "van@email.com" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": { - "error": "Event type abc is not supported. Aborting message." - } - }, - { - "description": "List data is not passed", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": {}, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": { - "error": "`listData` is not present inside properties. Aborting message." - } - }, - { - "description": "List data is empty", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": {} - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": { - "error": "`listData` is empty. Aborting message." - } - }, - { - "description": "List data is empty", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": { - "add": [ - { - "identifier": "" - }, - { - "identifier": "" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": { - "error": "`listData` is empty. Aborting message." - } - }, - { - "description": "Unsupported action type", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": { - "update": [ - { - "identifier": "alex@email.com" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": { - "error": "Unsupported action type. Aborting message." - } - }, - { - "description": "Add members to the audience list", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": { - "add": [ - { - "identifier": "alex@email.com" - }, - { - "identifier": "ryan@email.com" - }, - { - "identifier": "van@email.com" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "add": [ - { - "id": "alex@email.com" - }, - { - "id": "ryan@email.com" - } - ], - "remove": [] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "add": [ - { - "id": "van@email.com" - } - ], - "remove": [] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Remove members from the audience list", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": { - "remove": [ - { - "identifier": "alex@email.com" - }, - { - "identifier": "ryan@email.com" - }, - { - "identifier": "van@email.com" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "remove": [ - { - "id": "alex@email.com" - }, - { - "id": "ryan@email.com" - } - ], - "add": [] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "remove": [ - { - "id": "van@email.com" - } - ], - "add": [] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Add/Remove members", - "input": { - "message": { - "userId": "user123", - "type": "audiencelist", - "properties": { - "listData": { - "add": [ - { - "identifier": "alex@email.com" - }, - { - "userId": "user1" - } - ], - "remove": [ - { - "identifier": "ryan@email.com" - }, - { - "identifier": "van@email.com" - } - ] - } - }, - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "Config": { - "audienceId": "test-audienceId", - "audienceName": "test-audienceName", - "accessToken": "test-accessToken", - "clientSideId": "test-clientSideId" - } - } - }, - "output": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "add": [ - { - "id": "alex@email.com" - } - ], - "remove": [ - { - "id": "ryan@email.com" - } - ] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://app.launchdarkly.com/api/v2/segment-targets/rudderstack", - "headers": { - "Authorization": "test-accessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "environmentId": "test-clientSideId", - "cohortId": "test-audienceId", - "cohortName": "test-audienceName", - "listData": { - "add": [], - "remove": [ - { - "id": "van@email.com" - } - ] - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - } -] diff --git a/test/__tests__/data/leanplum_input.json b/test/__tests__/data/leanplum_input.json deleted file mode 100644 index d1a3741083..0000000000 --- a/test/__tests__/data/leanplum_input.json +++ /dev/null @@ -1,924 +0,0 @@ -[ - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id2", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id3", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id3", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "page", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "name": "Test Page Name", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id3", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "page", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id4", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id5", - "properties": { - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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)" - }, - "integrations": { - "All": true - }, - "messageId": "id6", - "properties": { - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "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 - }, - "traits": { - "id": "some_developer_id", - "createAt": "2019-10-14T09:03:17.562Z", - "address": { - "country": "USA", - "city": "NY" - }, - "country": "India", - "city": "Delhi" - } - }, - "type": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": { - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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)" - }, - "integrations": { - "All": true - }, - "messageId": "id1", - "properties": { - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "account: logged out", - "integrations": { - "All": true - }, - "messageId": "id1", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "track", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "account: logged out", - "integrations": { - "All": true - }, - "messageId": "id1", - "properties": { - "name": "MainActivity", - "automatic": true, - "total": 2.45, - "currency": "USD" - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "track", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - } -] diff --git a/test/__tests__/data/leanplum_output.json b/test/__tests__/data/leanplum_output.json deleted file mode 100644 index 8de34e5c8f..0000000000 --- a/test/__tests__/data/leanplum_output.json +++ /dev/null @@ -1,703 +0,0 @@ -[ - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "Test Page Name", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - { - "statusCode": 400, - "error": "Missing required value from [\"properties.name\",\"event\"]" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "setUserAttributes" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "00000000000000000000000000", - "newUserId": "some_developer_id", - "userAttributes": { - "id": "some_developer_id", - "createAt": "2019-10-14T09:03:17.562Z", - "address": { "country": "USA", "city": "NY" }, - "country": "India", - "city": "Delhi" - }, - "created": 1571043798, - "locale": "en-US", - "country": "USA", - "city": "NY", - "time": 1571043798, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "advance" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - { - "statusCode": 400, - "error": "Missing required value from [\"properties.name\",\"event\"]" - }, - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "track" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "event": "account: logged out", - "deviceId": "5094f5704b9cf2b3", - "params": { "name": "MainActivity", "automatic": true }, - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "start" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { "anonymousId": "5094f5704b9cf2b3" }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { "Content-Type": "application/json" }, - "params": { "action": "track" }, - "body": { - "JSON": { - "apiVersion": "1.0.6", - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "userId": "5094f5704b9cf2b3", - "event": "account: logged out", - "deviceId": "5094f5704b9cf2b3", - "params": { - "name": "MainActivity", - "automatic": true, - "total": 2.45, - "currency": "USD" - }, - "value": 2.45, - "currencyCode": "USD", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ] -] diff --git a/test/__tests__/data/leanplum_router_input.json b/test/__tests__/data/leanplum_router_input.json deleted file mode 100644 index ba36628209..0000000000 --- a/test/__tests__/data/leanplum_router_input.json +++ /dev/null @@ -1,142 +0,0 @@ -[ - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "message": { - "anonymousId": "5094f5704b9cf2b3", - "channel": "mobile", - "context": { - "app": { - "build": "1", - "name": "LeanPlumIntegrationAndroid", - "namespace": "com.android.SampleLeanPlum", - "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": "id2", - "properties": { - "name": "MainActivity", - "automatic": true - }, - "originalTimestamp": "2020-03-12T09:05:03.421Z", - "type": "screen", - "sentAt": "2020-03-12T09:05:13.042Z" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - } -] diff --git a/test/__tests__/data/leanplum_router_output.json b/test/__tests__/data/leanplum_router_output.json deleted file mode 100644 index e32c53cf83..0000000000 --- a/test/__tests__/data/leanplum_router_output.json +++ /dev/null @@ -1,176 +0,0 @@ -[ - { - "batchedRequest": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { - "Content-Type": "application/json" - }, - "params": { - "action": "start" - }, - "body": { - "JSON": { - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "apiVersion": "1.0.6", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { - "anonymousId": "5094f5704b9cf2b3" - }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { - "Content-Type": "application/json" - }, - "params": { - "action": "advance" - }, - "body": { - "JSON": { - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "apiVersion": "1.0.6", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - }, - { - "batchedRequest": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { - "Content-Type": "application/json" - }, - "params": { - "action": "start" - }, - "body": { - "JSON": { - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "apiVersion": "1.0.6", - "userId": "5094f5704b9cf2b3", - "deviceId": "5094f5704b9cf2b3", - "appVersion": "1.0", - "systemName": "Android", - "systemVersion": "8.1.0", - "deviceName": "generic_x86", - "deviceModel": "Android SDK built for x86", - "userAttributes": { - "anonymousId": "5094f5704b9cf2b3" - }, - "locale": "en-US", - "timezone": "Asia/Kolkata", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.leanplum.com/api", - "headers": { - "Content-Type": "application/json" - }, - "params": { - "action": "advance" - }, - "body": { - "JSON": { - "appId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "apiVersion": "1.0.6", - "userId": "5094f5704b9cf2b3", - "state": "MainActivity", - "deviceId": "5094f5704b9cf2b3", - "time": 1584003903, - "devMode": true - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "5094f5704b9cf2b3" - } - ], - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "applicationId": "leanplum_application_id", - "clientKey": "leanplum_client_key__", - "isDevelop": true, - "useNativeSDK": false, - "sendEvents": false - } - } - } -] diff --git a/test/__tests__/data/lemnisk.json b/test/__tests__/data/lemnisk.json deleted file mode 100644 index 3dc295da58..0000000000 --- a/test/__tests__/data/lemnisk.json +++ /dev/null @@ -1,983 +0,0 @@ -[ - { - "description": "Error: Event Type is required ", - "input": { - "message": { - "userId": "user123", - "event": "Product Reviewed", - "properties": { - "review_body": "Average product, expected much more." - }, - "context": { - "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" - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "error": "Event type is required" - } - }, - { - "description": "Error: Pl Track: Invalid Configuration", - "input": { - "message": { - "type": "track", - "properties": { - "product_id": "ab1234", - "rating": 3, - "review_body": "Average product, expected much more.", - "review_id": "12345" - }, - "event": "Product Reviewed", - "context": { - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "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" - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "error": "Configuration for Web Mode requires write key and region url" - } - }, - { - "description": "Error: Invalid Configs for Diapi", - "input": { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - }, - "traits": { - "firstName": "test", - "lastName": "rudderlabs", - "role": "Manager", - "address": "Flat No 58 ABC building XYZ Area near PQRS , 354408", - "hasPurchased": "yes", - "email": "abc@xyz.com", - "title": "Mr", - "phone": "9876543212", - "state": "Uttar Pradesh", - "zipcode": "243001", - "prospectOrCustomer": "Prospect", - "country": "India", - "website": "abc.com", - "subscriptionStatus": "New" - } - }, - "messageId": "25ea6605-c788-4cab-8fed-2cf0b831c4a8", - "originalTimestamp": "2020-02-02T00:23:09.544Z", - "receivedAt": "2022-08-17T10:40:21.162+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2022-08-17T10:40:21.728+05:30", - "timestamp": "2020-02-02T05:53:08.977+05:30", - "type": "track", - "userId": "identified user id" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "", - "pl": "", - "passKey": "1234", - "apiKey": "", - "diapi": "https://crux.lemnisk.co/v3/data", - "cloudMode": "server", - "srcId": "1", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "error": "Configuration for Server Mode requires Api key, Pass Key and region url" - } - }, - { - "description": "Diapi Platform: Track Call", - "input": { - "message": { - "type": "track", - "properties": { - "product_id": "ab1234", - "rating": 3, - "review_body": "Average product, expected much more.", - "review_id": "12345" - }, - "event": "Product Reviewed", - "context": { - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.9.1" - }, - "traits": { - "email": "a@example.com" - }, - "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" - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383", - "userId": "user123" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "", - "pl": "", - "passKey": "1234", - "apiKey": "abcd", - "diapi": "https://crux.lemnisk.co/v3/data", - "cloudMode": "server", - "srcId": "1", - "diapiWriteKey": "diapi_write_key" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://crux.lemnisk.co/v3/data", - "headers": { - "Content-Type": "application/json", - "x-api-passKey": "1234", - "x-api-key": "abcd" - }, - "params": {}, - "body": { - "JSON": { - "type": "track", - "properties": { - "product_id": "ab1234", - "rating": 3, - "review_body": "Average product, expected much more.", - "review_id": "12345" - }, - "WriteKey": "diapi_write_key", - "eventname": "Product Reviewed", - "userId": "user123", - "email": "a@example.com", - "srcid": "1" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "user123" - } - }, - { - "description": "Error: Message type not supported", - "input": { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - }, - "traits": { - "state": "uttar pradesh" - } - }, - "messageId": "25ea6605-c788-4cab-8fed-2cf0b831c4a8", - "originalTimestamp": "2020-02-02T00:23:09.544Z", - "receivedAt": "2022-08-17T10:40:21.162+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2022-08-17T10:40:21.728+05:30", - "timestamp": "2020-02-02T05:53:08.977+05:30", - "userId": "identified user id", - "type": "Alias" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "error": "Event type alias is not supported in Web Cloud Mode" - } - }, - { - "description": " Page Call -> pl Platform ", - "input": { - "message": { - "anonymousId": "anon-id-new", - "channel": "mobile", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "name": "Home", - "category": "Profile", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "page" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://10.11.36.17:8080/analyze/analyze.php", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "type": "page", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": { - "ua": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - } - }, - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "name": "Home", - "id": "anon-id-new", - "userId": "anon-id-new", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "writeKey": "pl_writeKey" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "anon-id-new" - } - }, - { - "description": " Identify Call -> pl Platform ", - "input": { - "message": { - "anonymousId": "anon-id-new", - "channel": "mobile", - "context": { - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "event": "Visited Home", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "traits": { - "name": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "identify" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://10.11.36.17:8080/analyze/analyze.php", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "type": "identify", - "context": { - "userAgent": { - "ua": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - } - }, - "customerProperties": { - "name": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "id": "anon-id-new", - "userId": "anon-id-new", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "writeKey": "pl_writeKey" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "anon-id-new" - } - }, - { - "description": " Track Call -> pl Platform ", - "input": { - "message": { - "anonymousId": "anon-id-new", - "channel": "mobile", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "event": "Visited Home", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "track" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://10.11.36.17:8080/analyze/analyze.php", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "type": "track", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": { - "ua": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - } - }, - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "event": "Visited Home", - "id": "anon-id-new", - "userId": "anon-id-new", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "writeKey": "pl_writeKey" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "anon-id-new" - } - } -] diff --git a/test/__tests__/data/lemnisk_router.json b/test/__tests__/data/lemnisk_router.json deleted file mode 100644 index 8599a36445..0000000000 --- a/test/__tests__/data/lemnisk_router.json +++ /dev/null @@ -1,639 +0,0 @@ -[ - { - "description": "Lemnisk batch events", - "input": [ - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "type": "identify" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "", - "pl": "https://crux.lemnisk.co/v2/data", - "passKey": "", - "apiKey": "", - "diapi": " ", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": { - "jobId": 1 - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "channel": "mobile", - "context": { - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "event": "Visited Home", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "traits": { - "name": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "identify" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": { - "anonymousId": "12345", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "DISCORD", - "jobId": 123, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "channel": "mobile", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "event": "Visited Home", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "track" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "DISCORD", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ], - "output": [ - { - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "", - "pl": "https://crux.lemnisk.co/v2/data", - "passKey": "", - "apiKey": "", - "diapi": " ", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": [ - { - "jobId": 1 - } - ], - "statTags": { - "errorCategory": "dataValidation", - "errorType": "configuration" - }, - "batched": false, - "statusCode": 400, - "error": "Configuration for Web Mode requires write key and region url" - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://10.11.36.17:8080/analyze/analyze.php", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "type": "identify", - "context": { - "userAgent": { - "ua": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - } - }, - "customerProperties": { - "name": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "id": "anon-id-new", - "userId": "anon-id-new", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "writeKey": "pl_writeKey" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "anon-id-new" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": [ - { - "anonymousId": "12345", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "DISCORD", - "jobId": 123, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - ], - "batched": false, - "statusCode": 200 - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://10.11.36.17:8080/analyze/analyze.php", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "type": "track", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": { - "ua": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - } - }, - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "event": "Visited Home", - "id": "anon-id-new", - "userId": "anon-id-new", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-29T14:50:29.907+05:30", - "writeKey": "pl_writeKey" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "anon-id-new" - }, - "destination": { - "id": "2JAdls99p6UxoFNSKGwvh0aIt7E", - "name": "Lemnisk Marketing Automation", - "enabled": true, - "Config": { - "plWriteKey": "pl_writeKey", - "pl": "http://10.11.36.17:8080/analyze/analyze.php", - "passKey": "", - "apiKey": "", - "diapi": "", - "cloudMode": "web", - "srcId": "", - "diapiWriteKey": "" - }, - "destinationDefinition": { - "config": { - "transformAt": "processor", - "transformAtV1": "processor", - "saveDestinationResponse": true, - "includeKeys": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "srcId" - ], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "supportedMessageTypes": ["track", "identify", "page"], - "destConfig": { - "defaultConfig": [ - "apiKey", - "passKey", - "cloudMode", - "diapi", - "pl", - "diapiWriteKey", - "plWriteKey", - "deviceModeWriteKey", - "srcId" - ] - }, - "secretKeys": ["apiKey", "passKey", "plWriteKey", "diapiWriteKey"] - }, - "responseRules": null, - "id": "1j9dYVEplxUC5swbXkpK9fYT7uk", - "name": "LEMNISK_MARKETING_AUTOMATION", - "displayName": "Lemnisk Marketing Automation", - "createdAt": "2022-12-12T21:58:08.637Z" - }, - "rootStore": null, - "isProcessorEnabled": true - }, - "metadata": [ - { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "DISCORD", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - ], - "batched": false, - "statusCode": 200 - } - ] - } -] diff --git a/test/__tests__/data/lytics_cdk_output.json b/test/__tests__/data/lytics_cdk_output.json deleted file mode 100644 index ee8d3e7254..0000000000 --- a/test/__tests__/data/lytics_cdk_output.json +++ /dev/null @@ -1,342 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "_e": "Order Completed", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "message Type is not present. Aborting message." - }, - { - "statusCode": 400, - "error": "message type gone is not supported" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "_e": "Order Completed", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "ApplicationLoaded", - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "ApplicationLoaded", - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise", - "first_name": "Rudderstack", - "last_name": "Test" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/lytics_input.json b/test/__tests__/data/lytics_input.json deleted file mode 100644 index 4ea3001e2e..0000000000 --- a/test/__tests__/data/lytics_input.json +++ /dev/null @@ -1,948 +0,0 @@ -[ - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "timestamp": "2020-10-16T08:10:12.782Z", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "device": { - "id": "7e32188a4dab669f", - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "token": "desuhere", - "type": "android" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "531e3507-1ef5-4a06-b83c-cb521ff34f0c", - "originalTimestamp": "2020-10-16T08:53:29.386Z", - "receivedAt": "2020-10-16T14:23:29.402+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:53:29.387Z", - "timestamp": "2020-10-16T14:23:29.401+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "a61357dd-e29e-4033-b1af-029625947fec", - "originalTimestamp": "2020-10-16T09:05:11.001Z", - "receivedAt": "2020-10-16T14:35:11.014+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:05:11.002Z", - "timestamp": "2020-10-16T14:35:11.013+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "gone", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "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": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "destination_props": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "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": "testhubspot2@email.com", - "name": "Test Hubspot", - "anonymousId": "12345" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "os": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "page", - "messageId": "e8585d9a-7137-4223-b295-68ab1b17dad7", - "originalTimestamp": "2019-10-15T09:35:31.289Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z", - "destination_props": { - "AF": { - "af_uid": "afUid" - } - } - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise", - "firstName": "Rudderstack", - "lastname": "Test" - }, - "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", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/lytics_output.json b/test/__tests__/data/lytics_output.json deleted file mode 100644 index 8a1949bbb4..0000000000 --- a/test/__tests__/data/lytics_output.json +++ /dev/null @@ -1,342 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "_e": "Order Completed", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "\"type\" is a required field and it must be a string" - }, - { - "statusCode": 400, - "error": "message type \"gone\" not supported for \"lytics\"" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "_e": "Order Completed", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "ApplicationLoaded", - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "ApplicationLoaded", - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise", - "first_name": "Rudderstack", - "last_name": "Test" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/lytics_router_input.json b/test/__tests__/data/lytics_router_input.json deleted file mode 100644 index 425a7b1e3e..0000000000 --- a/test/__tests__/data/lytics_router_input.json +++ /dev/null @@ -1,194 +0,0 @@ -[ - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "timestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "type": "track", - "userId": "rudder123" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify", - "userId": "rudder123" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/lytics_router_output.json b/test/__tests__/data/lytics_router_output.json deleted file mode 100644 index 2ac41bea00..0000000000 --- a/test/__tests__/data/lytics_router_output.json +++ /dev/null @@ -1,131 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "_e": "Order Completed", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.lytics.io/collect/json/default?access_token=dummyApiKey", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "rudder123", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "email": "rudderTest@gmail.com", - "name": "Rudder Test", - "plan": "Enterprise" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "stream": "default" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/mailjet.json b/test/__tests__/data/mailjet.json deleted file mode 100644 index 86e49f924d..0000000000 --- a/test/__tests__/data/mailjet.json +++ /dev/null @@ -1,145 +0,0 @@ -[ - { - "description": "No Message type", - "input": { - "message": { - "userId": "test@123", - "context": { - "traits": { - "email": "test@rudderstack.com", - "username": "Samle_putUserName", - "firstName": "uday" - } - }, - "integrations": { - "All": true, - "user.com": { - "lookup": "email" - } - } - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret" - } - } - }, - "output": { - "error": "Event type is required" - } - }, - { - "description": "Unsupported Type", - "input": { - "message": { - "userId": "test@123", - "type": "trackUser", - "context": { - "traits": { - "email": "test@rudderstack.com", - "firstName": "test", - "lastName": "rudderstack", - "age": 15, - "gender": "male", - "status": "user", - "city": "Kalkata", - "country": "india", - "tags": ["productuser"], - "phone": "9225467887" - } - } - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret" - } - } - }, - "output": { - "error": "Event type \"trackuser\" is not supported" - } - }, - { - "description": "MailJet identify call without an email", - "input": { - "message": { - "userId": "test@123", - "type": "identify", - "context": { - "traits": { - "firstName": "test", - "lastName": "rudderstack", - "age": 15, - "gender": "male", - "status": "user", - "city": "Kalkata", - "country": "india", - "tags": ["productuser"], - "phone": "9225467887" - } - } - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret" - } - } - }, - "output": { - "error": "Missing required value from \"email\"" - } - }, - { - "description": "Mailjet identify call without batching", - "input": { - "message": { - "userId": "user@45", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - } - } - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "", - "headers": {}, - "params": {}, - "body": { - "JSON": { - "email": "test@user.com", - "properties": { "country": "india" } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "listId": "58578", - "action": "addnoforce" - } - } -] diff --git a/test/__tests__/data/mailjet_batch.json b/test/__tests__/data/mailjet_batch.json deleted file mode 100644 index 10c2a863d0..0000000000 --- a/test/__tests__/data/mailjet_batch.json +++ /dev/null @@ -1,640 +0,0 @@ -[ - { - "description": "batching with 1 listId and 1 action", - "input": [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "userId": "user@45", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - } - } - } - } - ], - "output": [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "FORM": {}, - "JSON": { - "Action": "addnoforce", - "Contacts": [ - { - "email": "test@user.com", - "properties": { "country": "india" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - } - ] - }, - { - "description": "batching with multiple listId and multiple action combinations", - "input": [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "userId": "user@45", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - } - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 2 - }, - "message": { - "userId": "user@46", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test2@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - }, - "externalId": [ - { - "type": "listId", - "id": "58570" - } - ] - }, - "integrations": { - "All": true, - "mailjet": { - "Action": "unsub" - } - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 3 - }, - "message": { - "userId": "user@47", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test3@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - }, - "externalId": [ - { - "type": "listId", - "id": "58576" - } - ] - }, - "integrations": { - "All": true, - "mailjet": { - "Action": "addforce" - } - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 4 - }, - "message": { - "userId": "user@48", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test4@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - }, - "externalId": [ - { - "type": "listId", - "id": "58576" - } - ] - }, - "integrations": { - "All": true, - "mailjet": { - "Action": "unsub" - } - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 5 - }, - "message": { - "userId": "user@49", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test5@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - }, - "externalId": [ - { - "type": "listId", - "id": "585896" - } - ] - }, - "integrations": { - "All": true, - "mailjet": { - "Action": "unsub" - } - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 6 - }, - "message": { - "userId": "user@49", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test5@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - }, - "externalId": [ - { - "type": "listId", - "id": "584896" - } - ] - } - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 7 - }, - "message": { - "userId": "user@50", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test10@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - } - } - } - } - ], - "output": [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "addnoforce", - "Contacts": [ - { - "email": "test@user.com", - "properties": { - "country": "india" - } - }, - { - "email": "test10@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 1 }, { "jobId": 7 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58570/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "unsub", - "Contacts": [ - { - "email": "test2@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 2 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58576/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "addforce", - "Contacts": [ - { - "email": "test3@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 3 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58576/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "unsub", - "Contacts": [ - { - "email": "test4@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 4 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/585896/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "unsub", - "Contacts": [ - { - "email": "test5@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 5 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/584896/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "JSON": { - "Action": "addnoforce", - "Contacts": [ - { - "email": "test5@user.com", - "properties": { - "country": "india" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 6 }], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - } - ] - } -] diff --git a/test/__tests__/data/mailjet_router.json b/test/__tests__/data/mailjet_router.json deleted file mode 100644 index 7381a9dfa6..0000000000 --- a/test/__tests__/data/mailjet_router.json +++ /dev/null @@ -1,86 +0,0 @@ -[ - { - "input": [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [{ "from": "userCountry", "to": "country" }] - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "userId": "user@45", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "test@user.com", - "phone": "7267286346802347827", - "userId": "sajal", - "city": "gondal", - "userCountry": "india", - "lastName": "dev", - "username": "Samle_putUserName", - "firstName": "rudderlabs" - } - } - } - } - ], - "output": [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=" - }, - "params": {}, - "body": { - "FORM": {}, - "JSON": { - "Action": "addnoforce", - "Contacts": [ - { - "email": "test@user.com", - "properties": { "country": "india" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "apiSecret": "dummyApiSecret", - "listId": "58578", - "contactPropertiesMapping": [ - { - "from": "userCountry", - "to": "country" - } - ] - } - } - } - ] - } -] diff --git a/test/__tests__/data/mailjet_source.json b/test/__tests__/data/mailjet_source.json index d9869585cb..6d9562e2c4 100644 --- a/test/__tests__/data/mailjet_source.json +++ b/test/__tests__/data/mailjet_source.json @@ -1,23 +1,25 @@ [ { "description": "MailJet email open event", - "input": { - "event": "open", - "time": 1664443614, - "MessageID": 94857068804950690, - "Message_GUID": "54d6cdec-f659-4547-8926-13d9c4126b82", - "email": "test@rudderstack.com", - "mj_campaign_id": 108760, - "mj_contact_id": 399962859, - "customcampaign": "mj.nl=58424", - "ip": "66.249.84.231", - "geo": "US", - "agent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", - "CustomID": "", - "Payload": "" - }, - "output": { - "Message": { + "input": [ + { + "event": "open", + "time": 1664443614, + "MessageID": 94857068804950690, + "Message_GUID": "54d6cdec-f659-4547-8926-13d9c4126b82", + "email": "test@rudderstack.com", + "mj_campaign_id": 108760, + "mj_contact_id": 399962859, + "customcampaign": "mj.nl=58424", + "ip": "66.249.84.231", + "geo": "US", + "agent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", + "CustomID": "", + "Payload": "" + } + ], + "output": [ + { "context": { "library": { "name": "unknown", @@ -52,10 +54,10 @@ "originalTimestamp": "2022-09-29T09:26:54.000Z", "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" } - } + ] }, { - "description": "MailJet email bounce event", + "description": "MailJet email bounce event where input event is of type ", "input": { "event": "bounce", "time": 1664444171, @@ -70,8 +72,8 @@ "error_related_to": "system", "error": "connection issue" }, - "output": { - "Message": { + "output": [ + { "context": { "library": { "name": "unknown", @@ -102,23 +104,25 @@ "originalTimestamp": "2022-09-29T09:36:11.000Z", "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" } - } + ] }, { "description": "MailJet email sent event", - "input": { - "event": "sent", - "time": 1664444171, - "MessageID": 92886743924596480, - "Message_GUID": "0230c73a-2b77-4aea-8ef2-ed15d0edc5fd", - "email": "test@rudderstack.com", - "mj_campaign_id": 108892, - "mj_contact_id": 372651182, - "customcampaign": "mj.nl=58486", - "smtp_reply": "250 2.0.0 OK DMARC:Quarantine 1664444171 u17-20020adfdd51000000b0022cc3f2bf13si3225188wrm.271 - gsmtp" - }, - "output": { - "Message": { + "input": [ + { + "event": "sent", + "time": 1664444171, + "MessageID": 92886743924596480, + "Message_GUID": "0230c73a-2b77-4aea-8ef2-ed15d0edc5fd", + "email": "test@rudderstack.com", + "mj_campaign_id": 108892, + "mj_contact_id": 372651182, + "customcampaign": "mj.nl=58486", + "smtp_reply": "250 2.0.0 OK DMARC:Quarantine 1664444171 u17-20020adfdd51000000b0022cc3f2bf13si3225188wrm.271 - gsmtp" + } + ], + "output": [ + { "context": { "library": { "name": "unknown", @@ -149,26 +153,28 @@ "originalTimestamp": "2022-09-29T09:36:11.000Z", "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" } - } + ] }, { "description": "MailJet email bounce event", - "input": { - "event": "bounce", - "time": 1664444170, - "MessageID": 56013522696710744, - "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", - "email": "test@rudderstack.com", - "mj_campaign_id": 108892, - "mj_contact_id": 373142182, - "customcampaign": "mj.nl=58486", - "blocked": false, - "hard_bounce": false, - "error_related_to": "system", - "error": "connection issue" - }, - "output": { - "Message": { + "input": [ + { + "event": "bounce", + "time": 1664444170, + "MessageID": 56013522696710744, + "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", + "email": "test@rudderstack.com", + "mj_campaign_id": 108892, + "mj_contact_id": 373142182, + "customcampaign": "mj.nl=58486", + "blocked": false, + "hard_bounce": false, + "error_related_to": "system", + "error": "connection issue" + } + ], + "output": [ + { "context": { "library": { "name": "unknown", @@ -199,25 +205,27 @@ "originalTimestamp": "2022-09-29T09:36:10.000Z", "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" } - } + ] }, { "description": "MailJet when no email is present", - "input": { - "event": "bounce", - "time": 1664444170, - "MessageID": 56013522696710744, - "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", - "mj_campaign_id": 108892, - "mj_contact_id": 373142182, - "customcampaign": "mj.nl=58486", - "blocked": false, - "hard_bounce": false, - "error_related_to": "system", - "error": "connection issue" - }, - "output": { - "Message": { + "input": [ + { + "event": "bounce", + "time": 1664444170, + "MessageID": 56013522696710744, + "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", + "mj_campaign_id": 108892, + "mj_contact_id": 373142182, + "customcampaign": "mj.nl=58486", + "blocked": false, + "hard_bounce": false, + "error_related_to": "system", + "error": "connection issue" + } + ], + "output": [ + { "context": { "library": { "name": "unknown", @@ -244,6 +252,118 @@ }, "originalTimestamp": "2022-09-29T09:36:10.000Z" } - } + ] + }, + { + "description": "MailJet Multiple payloads in single request", + "input": [ + { + "event": "open", + "time": 1704458040, + "MessageID": 987654, + "Message_GUID": "876r-oihugyf-7tfygh", + "email": "abc@r.com", + "mj_campaign_id": 321, + "mj_contact_id": 123, + "customcampaign": "test_campaign", + "url": "https://www.example.com/", + "ip": "ip_info", + "geo": "some geo info", + "agent": "mailjet api test" + }, + { + "event": "click", + "time": 1704458041, + "MessageID": 12345234567, + "Message_GUID": "12345-kjhgfd-2efv", + "email": "abc@r.com", + "mj_campaign_id": 12, + "mj_contact_id": 32532, + "customcampaign": "test_campaign", + "url": "https://www.example.com/", + "ip": "ip_info", + "geo": "some geo info", + "agent": "mailjet api test" + } + ], + "output": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "ip": "ip_info", + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "abc@r.com" + }, + "page": { + "url": "https://www.example.com/" + }, + "userAgent": "mailjet api test", + "externalId": [ + { + "type": "mailjetContactId", + "id": 123 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "open", + "properties": { + "customcampaign": "test_campaign", + "mj_campaign_id": 321, + "ip": "ip_info", + "url": "https://www.example.com/" + }, + "userId": "593a5aff0b445b3b77a6d9676b7ec86e", + "originalTimestamp": "2024-01-05T12:34:00.000Z" + }, + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "page": { + "url": "https://www.example.com/" + }, + + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "abc@r.com" + }, + "userAgent": "mailjet api test", + "ip": "ip_info", + "externalId": [ + { + "type": "mailjetContactId", + "id": 32532 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "click", + "properties": { + "customcampaign": "test_campaign", + "mj_campaign_id": 12, + "ip": "ip_info", + "url": "https://www.example.com/" + }, + "userId": "593a5aff0b445b3b77a6d9676b7ec86e", + "originalTimestamp": "2024-01-05T12:34:01.000Z" + } + ] } ] diff --git a/test/__tests__/data/mailmodo.json b/test/__tests__/data/mailmodo.json deleted file mode 100644 index 30b093a6b2..0000000000 --- a/test/__tests__/data/mailmodo.json +++ /dev/null @@ -1,573 +0,0 @@ -[ - { - "description": "Track call", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - }, - "message": { - "event": "trackevent", - "type": "track", - "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", - "avatar": "https://i.pravatar.cc/300" - }, - "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" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailmodo.com/api/v1/addEvent", - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "email": "firstUser@testmail.com", - "event_name": "trackevent" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Providing empty API Key", - "input": { - "destination": { - "Config": { - "apiKey": "" - } - }, - "message": { - "event": "trackevent", - "type": "track", - "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", - "avatar": "https://i.pravatar.cc/300" - }, - "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" - } - }, - "output": { - "statusCode": 400, - "error": "API Key is not present, Aborting event" - } - }, - { - "description": "Not providing event type", - "input": { - "destination": { - "Config": { - "apiKey": "ahj" - } - }, - "message": { - "event": "trackevent", - "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", - "avatar": "https://i.pravatar.cc/300" - }, - "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" - } - }, - "output": { - "statusCode": 400, - "error": "Event type is required" - } - }, - { - "description": "Page call- not supported", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abcdef" - } - }, - "message": { - "type": "page", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - } - }, - "output": { - "statusCode": 400, - "error": "Event type page is not supported" - } - }, - { - "description": "Identify call- with empty listName", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "" - } - }, - "message": { - "type": "identify", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "email": "test3@abc.com", - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailmodo.com/api/v1/addToList/batch", - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "listName": "Rudderstack", - "values": [ - { - "email": "test3@abc.com" - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Identify call- with listName", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abcdef" - } - }, - "message": { - "type": "identify", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "email": "test3@abc.com", - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailmodo.com/api/v1/addToList/batch", - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "listName": "abcdef", - "values": [ - { - "email": "test3@abc.com" - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Identify call- without email", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abcdef" - } - }, - "message": { - "type": "identify", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - } - }, - "output": { - "statusCode": 400, - "error": "Missing required value from [\"traits.email\",\"context.traits.email\",\"properties.email\"]" - } - }, - { - "description": "Identify call- with user properties(address as an object)", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abcdef" - } - }, - "message": { - "type": "identify", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "traits": { - "email": "testabc2@abcd.com", - "name": "Rudder Test", - "firstName": "Test", - "lastName": "Rudderlabs", - "age": 21, - "phone": "9876543210", - "address": { - "street": "A street", - "city": "Vijayawada", - "country": "India" - } - }, - "timestamp": "2020-02-02T00:23:09.544Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailmodo.com/api/v1/addToList/batch", - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "listName": "abcdef", - "values": [ - { - "email": "testabc2@abcd.com", - "data": { - "age": 21, - "first_name": "Test", - "last_name": "Rudderlabs", - "name": "Rudder Test", - "phone": "9876543210", - "trait1": "new-val", - "city": "Vijayawada", - "country": "India", - "address1": "A street Vijayawada India " - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Identify call- with user properties(address as a string)", - "input": { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abcdef" - } - }, - "message": { - "type": "identify", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "traits": { - "email": "testabc2@abcd.com", - "name": "Rudder Test", - "firstName": "Test", - "lastName": "Rudderlabs", - "age": 21, - "phone": "9876543210", - "address": "welcome to home" - }, - "timestamp": "2020-02-02T00:23:09.544Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mailmodo.com/api/v1/addToList/batch", - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "listName": "abcdef", - "values": [ - { - "email": "testabc2@abcd.com", - "data": { - "age": 21, - "first_name": "Test", - "last_name": "Rudderlabs", - "name": "Rudder Test", - "phone": "9876543210", - "trait1": "new-val", - "address1": "welcome to home" - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - } -] diff --git a/test/__tests__/data/mailmodo_router_input.json b/test/__tests__/data/mailmodo_router_input.json deleted file mode 100644 index 78db8426ff..0000000000 --- a/test/__tests__/data/mailmodo_router_input.json +++ /dev/null @@ -1,141 +0,0 @@ -[ - { - "message": { - "type": "identify", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "email": "test@abc.com", - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abc" - }, - "Enabled": true - } - }, - { - "message": { - "type": "track", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "email": "test@abc.com", - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - }, - "metadata": { - "jobId": 3 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abc" - }, - "Enabled": true - } - }, - { - "message": { - "type": "identify", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "traits": { - "email": "test@abc.com", - "name": "Rudder Test", - "firstName": "Test", - "lastName": "Rudderlabs", - "age": 21, - "phone": "9876543210" - }, - "timestamp": "2020-02-02T00:23:09.544Z" - }, - "metadata": { - "jobId": 4 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abc" - }, - "Enabled": true - } - }, - { - "message": { - "type": "identify", - "event": "Email Opened", - "sentAt": "2020-08-28T16:26:16.473Z", - "context": { - "library": { - "name": "analytics-node", - "version": "0.0.3" - } - }, - "_metadata": { - "nodeVersion": "10.22.0" - }, - "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", - "properties": { - "subject": "resume validate", - "sendtime": "2020-01-01", - "sendlocation": "akashdeep@gmail.com" - }, - "anonymousId": "abcdeeeeeeeexxxx102", - "originalTimestamp": "2020-08-28T16:26:06.468Z" - }, - "metadata": { - "jobId": 5 - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "" - }, - "Enabled": true - } - } -] diff --git a/test/__tests__/data/mailmodo_router_output.json b/test/__tests__/data/mailmodo_router_output.json deleted file mode 100644 index 2e2eb9e3fb..0000000000 --- a/test/__tests__/data/mailmodo_router_output.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "listName": "abc", - "values": [ - { - "email": "test@abc.com" - }, - { - "email": "test@abc.com", - "data": { - "name": "Rudder Test", - "first_name": "Test", - "last_name": "Rudderlabs", - "age": 21, - "phone": "9876543210", - "trait1": "new-val" - } - } - ] - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.mailmodo.com/api/v1/addToList/batch" - }, - "metadata": [ - { - "jobId": 2 - }, - { - "jobId": 4 - } - ], - "batched": true, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abc" - }, - "Enabled": true - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "email": "test@abc.com", - "event_name": "Email Opened", - "event_properties": { - "email": "test@abc.com", - "sendlocation": "akashdeep@gmail.com", - "sendtime": "2020-01-01", - "subject": "resume validate" - } - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "mmApiKey": "dummyApiKey", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.mailmodo.com/api/v1/addEvent" - }, - "metadata": [ - { - "jobId": 3 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "abc" - }, - "Enabled": true - } - }, - { - "batched": false, - "error": "Missing required value from [\"traits.email\",\"context.traits.email\",\"properties.email\"]", - "metadata": [ - { - "jobId": 5 - } - ], - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation" - }, - "statusCode": 400, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "listName": "" - }, - "Enabled": true - } - } -] diff --git a/test/__tests__/data/marketo_bulk_upload_jobStatus_output.json b/test/__tests__/data/marketo_bulk_upload_jobStatus_output.json index eac43ee82c..320ed050c5 100644 --- a/test/__tests__/data/marketo_bulk_upload_jobStatus_output.json +++ b/test/__tests__/data/marketo_bulk_upload_jobStatus_output.json @@ -8,7 +8,7 @@ }, { "statusCode": 400, - "error": "Unable to fetch job status" + "error": "Unable to fetch job status: due to error " } ] }, @@ -21,7 +21,7 @@ }, { "statusCode": 400, - "error": "Unable to fetch job status" + "error": "Unable to fetch job status: due to error " } ] } diff --git a/test/__tests__/data/moengage_input.json b/test/__tests__/data/moengage_input.json deleted file mode 100644 index 290d19565c..0000000000 --- a/test/__tests__/data/moengage_input.json +++ /dev/null @@ -1,1661 +0,0 @@ -[ - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "timezone": "Asia/Tokyo", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "category": "some category", - "originalArray": [ - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - } - ], - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "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 - }, - "traits": { - "CID": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "RC_DATE": "2021-03-22T12:36:34Z", - "RC_NO_OF_SKUS": 1, - "RC_PN_SKU_LIST": "9317" - }, - "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "device": { - "id": "7e32188a4dab669f", - "manufacturer": "Google", - "model": "Android SDK built for x86", - "name": "generic_x86", - "token": "desuhere", - "type": "android" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "531e3507-1ef5-4a06-b83c-cb521ff34f0c", - "originalTimestamp": "2020-10-16T08:53:29.386Z", - "receivedAt": "2020-10-16T14:23:29.402+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:53:29.387Z", - "timestamp": "2020-10-16T14:23:29.401+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "a61357dd-e29e-4033-b1af-029625947fec", - "originalTimestamp": "2020-10-16T09:05:11.001Z", - "receivedAt": "2020-10-16T14:35:11.014+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:05:11.002Z", - "timestamp": "2020-10-16T14:35:11.013+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "EU" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "IND" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "AMA" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "IND" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "9eb2f7c0-d896-494e-b105-60f604ce2906", - "originalTimestamp": "2020-10-16T09:09:31.465Z", - "receivedAt": "2020-10-16T14:39:31.468+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T09:09:31.466Z", - "timestamp": "2020-10-16T14:39:31.467+05:30", - "type": "gone", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "IND" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "channel": "web", - "context": { - "timezone": "Asia/Kolkata", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "category": "some category", - "originalArray": [ - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3", "tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3", "tag_1", "tag_2", "tag_3"] - } - ], - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "timezone": "Wrong/Timezone", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "device": { - "id": "7e32188a4dab669f", - "manufacturer": "Google", - "model": "AOSP on IA Emulator", - "name": "generic_x86_arm", - "token": "desuhere", - "type": "ipados" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "531e3507-1ef5-4a06-b83c-cb521ff34f0c", - "originalTimestamp": "2020-10-16T08:53:29.386Z", - "receivedAt": "2020-10-16T14:23:29.402+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:53:29.387Z", - "timestamp": "2020-10-16T14:23:29.401+05:30", - "type": "identify", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "timezone": "Wrong/Timezone", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "device": { - "id": "7e32188a4dab669f", - "manufacturer": "Google", - "model": "AOSP on IA Emulator", - "name": "generic_x86_arm", - "token": "desuhere", - "type": "ipados" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "category": "some category", - "originalArray": [ - { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"] - }, - { - "nested_field": "nested value", - "tags": ["tag_1"] - }, - { - "nested_field": "nested value" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "timezone": "Wrong/Timezone", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "device": { - "id": "7e32188a4dab669f", - "manufacturer": "Google", - "model": "AOSP on IA Emulator", - "name": "generic_x86_arm", - "token": "desuhere", - "type": "ipados" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "category": "some category", - "originalArray": { - "nested_field": "nested value", - "tags": ["tag_1", "tag_2", "tag_3"], - "key1": { - "nested_field": "nested value", - "key11": "val11", - "key12": "val12", - "key13": { - "k1": "v1", - "k2": "v2" - }, - "key2": {}, - "key3": [] - } - }, - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "messageId": "adc7c2d0-0ebf-4593-b878-a0eb75932820", - "originalTimestamp": "2023-03-09T00:09:53.235+05:30", - "previousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "receivedAt": "2023-03-09T00:09:51.292+05:30", - "request_ip": "[::1]", - "rudderId": "1703da0d-2472-459c-9bf0-4e7b66b4673a", - "sentAt": "2023-03-09T00:09:53.235+05:30", - "timestamp": "2023-03-09T00:09:51.291+05:30", - "type": "alias", - "userId": "12345" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "messageId": "adc7c2d0-0ebf-4593-b878-a0eb75932820", - "originalTimestamp": "2023-03-09T00:09:53.235+05:30", - "receivedAt": "2023-03-09T00:09:51.292+05:30", - "request_ip": "[::1]", - "rudderId": "1703da0d-2472-459c-9bf0-4e7b66b4673a", - "sentAt": "2023-03-09T00:09:53.235+05:30", - "timestamp": "2023-03-09T00:09:51.291+05:30", - "type": "alias", - "userId": "12345" - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/moengage_output.json b/test/__tests__/data/moengage_output.json deleted file mode 100644 index 87559e5e6c..0000000000 --- a/test/__tests__/data/moengage_output.json +++ /dev/null @@ -1,810 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "category": "some category", - "originalArray[0].nested_field": "nested value", - "originalArray[0].tags[0]": "tag_1", - "originalArray[0].tags[1]": "tag_2", - "originalArray[0].tags[2]": "tag_3", - "originalArray[1].nested_field": "nested value", - "originalArray[1].tags[0]": "tag_1", - "originalArray[1].tags[1]": "tag_2", - "originalArray[1].tags[2]": "tag_3", - "originalArray[2].nested_field": "nested value", - "originalArray[2].tags[0]": "tag_1", - "originalArray[2].tags[1]": "tag_2", - "originalArray[2].tags[2]": "tag_3", - "originalArray[3].nested_field": "nested value", - "originalArray[3].tags[0]": "tag_1", - "originalArray[3].tags[1]": "tag_2", - "originalArray[3].tags[2]": "tag_3", - "originalArray[4].nested_field": "nested value", - "originalArray[4].tags[0]": "tag_1", - "originalArray[4].tags[1]": "tag_2", - "originalArray[4].tags[2]": "tag_3", - "originalArray[5].nested_field": "nested value", - "originalArray[5].tags[0]": "tag_1", - "originalArray[5].tags[1]": "tag_2", - "originalArray[5].tags[2]": "tag_3", - "originalArray[6].nested_field": "nested value", - "originalArray[6].tags[0]": "tag_1", - "originalArray[6].tags[1]": "tag_2", - "originalArray[6].tags[2]": "tag_3", - "originalArray[7].nested_field": "nested value", - "originalArray[7].tags[0]": "tag_1", - "originalArray[7].tags[1]": "tag_2", - "originalArray[7].tags[2]": "tag_3", - "originalArray[8].nested_field": "nested value", - "originalArray[8].tags[0]": "tag_1", - "originalArray[8].tags[1]": "tag_2", - "originalArray[8].tags[2]": "tag_3", - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30", - "user_timezone_offset": 32400, - "platform": "web" - } - ] - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "name": "Rudder Test", - "plan": "Enterprise", - "email": "rudderTest@gmail.com", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "CID": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "RC_DATE": "2021-03-22T12:36:34Z", - "RC_NO_OF_SKUS": 1, - "RC_PN_SKU_LIST": "9317" - }, - "customer_id": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - [ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "name": "Rudder Test", - "plan": "Enterprise", - "email": "rudderTest@gmail.com", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "device", - "device_id": "7e32188a4dab669f", - "attributes": { - "model": "Android SDK built for x86", - "push_id": "desuhere", - "platform": "android", - "app_version": "1.1.6" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/device/W0ZHNMPI2O4KHJ48ZILZACRA" - } - ], - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "name": "Rudder Test", - "plan": "Enterprise", - "email": "rudderTest@gmail.com", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-02.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "name": "Rudder Test", - "plan": "Enterprise", - "email": "rudderTest@gmail.com", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-03.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "statusCode": 400, - "error": "The region is not valid" - }, - { - "statusCode": 400, - "error": "Event type is required" - }, - { - "statusCode": 400, - "error": "Event type gone is not supported" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "category": "some category", - "originalArray[0].nested_field": "nested value", - "originalArray[0].tags[0]": "tag_1", - "originalArray[0].tags[1]": "tag_2", - "originalArray[0].tags[2]": "tag_3", - "originalArray[1].nested_field": "nested value", - "originalArray[1].tags[0]": "tag_1", - "originalArray[1].tags[1]": "tag_2", - "originalArray[1].tags[2]": "tag_3", - "originalArray[2].nested_field": "nested value", - "originalArray[2].tags[0]": "tag_1", - "originalArray[2].tags[1]": "tag_2", - "originalArray[2].tags[2]": "tag_3", - "originalArray[3].nested_field": "nested value", - "originalArray[3].tags[0]": "tag_1", - "originalArray[3].tags[1]": "tag_2", - "originalArray[3].tags[2]": "tag_3", - "originalArray[4].nested_field": "nested value", - "originalArray[4].tags[0]": "tag_1", - "originalArray[4].tags[1]": "tag_2", - "originalArray[4].tags[2]": "tag_3", - "originalArray[5].nested_field": "nested value", - "originalArray[5].tags[0]": "tag_1", - "originalArray[5].tags[1]": "tag_2", - "originalArray[5].tags[2]": "tag_3", - "originalArray[6].nested_field": "nested value", - "originalArray[6].tags[0]": "tag_1", - "originalArray[6].tags[1]": "tag_2", - "originalArray[6].tags[2]": "tag_3", - "originalArray[7].nested_field": "nested value", - "originalArray[7].tags[0]": "tag_1", - "originalArray[7].tags[1]": "tag_2", - "originalArray[7].tags[2]": "tag_3", - "originalArray[7].tags[3]": "tag_1", - "originalArray[7].tags[4]": "tag_2", - "originalArray[7].tags[5]": "tag_3", - "originalArray[8].nested_field": "nested value", - "originalArray[8].tags[0]": "tag_1", - "originalArray[8].tags[1]": "tag_2", - "originalArray[8].tags[2]": "tag_3", - "originalArray[8].tags[3]": "tag_1", - "originalArray[8].tags[4]": "tag_2", - "originalArray[8].tags[5]": "tag_3", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30", - "user_timezone_offset": 19800, - "platform": "web" - } - ] - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "rudder123" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30", - "platform": "web" - } - ] - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - [ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "customer", - "attributes": { - "name": "Rudder Test", - "plan": "Enterprise", - "email": "rudderTest@gmail.com", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "type": "device", - "device_id": "7e32188a4dab669f", - "attributes": { - "model": "AOSP on IA Emulator", - "push_id": "desuhere", - "platform": "iOS", - "app_version": "1.1.6" - }, - "customer_id": "rudder123" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "headers": { - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/device/W0ZHNMPI2O4KHJ48ZILZACRA" - } - ], - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "device_id": "7e32188a4dab669f", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98, - "originalArray[0].nested_field": "nested value", - "originalArray[0].tags[0]": "tag_1", - "originalArray[0].tags[1]": "tag_2", - "originalArray[0].tags[2]": "tag_3", - "originalArray[1].nested_field": "nested value", - "originalArray[1].tags[0]": "tag_1", - "originalArray[2].nested_field": "nested value", - "category": "some category" - }, - "platform": "iOS", - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30" - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "device_id": "7e32188a4dab669f", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98, - "originalArray.key1.key11": "val11", - "originalArray.key1.key12": "val12", - "originalArray.key1.key13.k1": "v1", - "originalArray.key1.key13.k2": "v2", - "originalArray.key1.nested_field": "nested value", - "originalArray.nested_field": "nested value", - "originalArray.tags[0]": "tag_1", - "originalArray.tags[1]": "tag_2", - "originalArray.tags[2]": "tag_3", - "originalArray.key1.key2": {}, - "originalArray.key1.key3": [], - "category": "some category" - }, - "platform": "iOS", - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30" - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "merge_data": [ - { - "merged_user": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "retained_user": "12345" - } - ] - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "userId": "12345", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "version": "1", - "endpoint": "https://api-01.moengage.com/v1/customer/merge?app_id=W0ZHNMPI2O4KHJ48ZILZACRA" - }, - { - "error": "Missing required value from \"previousId\"" - } -] diff --git a/test/__tests__/data/moengage_router_input.json b/test/__tests__/data/moengage_router_input.json deleted file mode 100644 index 5adcf68eae..0000000000 --- a/test/__tests__/data/moengage_router_input.json +++ /dev/null @@ -1,232 +0,0 @@ -[ - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "timezone": "Asia/Tokyo", - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "event": "Order Completed", - "integrations": { - "All": true - }, - "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", - "originalTimestamp": "2020-10-16T08:10:12.782Z", - "properties": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products": [ - { - "brand": "", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/bacon-jam.jpg", - "name": "Food/Drink", - "position": 1, - "price": 3, - "product_id": "product-bacon-jam", - "quantity": 2, - "sku": "sku-1", - "typeOfProduct": "Food", - "url": "https://www.example.com/product/bacon-jam", - "value": 6, - "variant": "Extra topped" - }, - { - "brand": "Levis", - "category": "Merch", - "currency": "GBP", - "image_url": "https://www.example.com/product/t-shirt.jpg", - "name": "T-Shirt", - "position": 2, - "price": 12.99, - "product_id": "product-t-shirt", - "quantity": 1, - "sku": "sku-2", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/t-shirt", - "value": 12.99, - "variant": "White" - }, - { - "brand": "Levis", - "category": "Merch", - "coupon": "APPARELSALE", - "currency": "GBP", - "image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "name": "T-Shirt-on-offer", - "position": 1, - "price": 12.99, - "product_id": "offer-t-shirt", - "quantity": 1, - "sku": "sku-3", - "typeOfProduct": "Shirt", - "url": "https://www.example.com/product/offer-t-shirt", - "value": 12.99, - "variant": "Black" - } - ], - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "receivedAt": "2020-10-16T13:40:12.792+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:10:12.783Z", - "timestamp": "2020-10-16T13:40:12.791+05:30", - "type": "track", - "userId": "rudder123" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.6" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.6" - }, - "locale": "en-GB", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/testing/script-test.html", - "referrer": "", - "search": "", - "title": "", - "url": "http://localhost:3243/testing/script-test.html" - }, - "screen": { - "density": 2 - }, - "traits": { - "company": { - "id": "abc123" - }, - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "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" - }, - "integrations": { - "All": true - }, - "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92", - "originalTimestamp": "2020-10-16T08:26:14.938Z", - "receivedAt": "2020-10-16T13:56:14.945+05:30", - "request_ip": "[::1]", - "sentAt": "2020-10-16T08:26:14.939Z", - "timestamp": "2020-10-16T13:56:14.944+05:30", - "type": "identify", - "userId": "rudder123" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/moengage_router_output.json b/test/__tests__/data/moengage_router_output.json deleted file mode 100644 index 75874804eb..0000000000 --- a/test/__tests__/data/moengage_router_output.json +++ /dev/null @@ -1,189 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/event/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "type": "event", - "actions": [ - { - "action": "Order Completed", - "attributes": { - "checkout_id": "what is checkout id here??", - "coupon": "APPARELSALE", - "currency": "GBP", - "order_id": "transactionId", - "products[0].brand": "", - "products[0].category": "Merch", - "products[0].currency": "GBP", - "products[0].image_url": "https://www.example.com/product/bacon-jam.jpg", - "products[0].name": "Food/Drink", - "products[0].position": 1, - "products[0].price": 3, - "products[0].product_id": "product-bacon-jam", - "products[0].quantity": 2, - "products[0].sku": "sku-1", - "products[0].typeOfProduct": "Food", - "products[0].url": "https://www.example.com/product/bacon-jam", - "products[0].value": 6, - "products[0].variant": "Extra topped", - "products[1].brand": "Levis", - "products[1].category": "Merch", - "products[1].currency": "GBP", - "products[1].image_url": "https://www.example.com/product/t-shirt.jpg", - "products[1].name": "T-Shirt", - "products[1].position": 2, - "products[1].price": 12.99, - "products[1].product_id": "product-t-shirt", - "products[1].quantity": 1, - "products[1].sku": "sku-2", - "products[1].typeOfProduct": "Shirt", - "products[1].url": "https://www.example.com/product/t-shirt", - "products[1].value": 12.99, - "products[1].variant": "White", - "products[2].brand": "Levis", - "products[2].category": "Merch", - "products[2].coupon": "APPARELSALE", - "products[2].currency": "GBP", - "products[2].image_url": "https://www.example.com/product/offer-t-shirt.jpg", - "products[2].name": "T-Shirt-on-offer", - "products[2].position": 1, - "products[2].price": 12.99, - "products[2].product_id": "offer-t-shirt", - "products[2].quantity": 1, - "products[2].sku": "sku-3", - "products[2].typeOfProduct": "Shirt", - "products[2].url": "https://www.example.com/product/offer-t-shirt", - "products[2].value": 12.99, - "products[2].variant": "Black", - "revenue": 31.98, - "shipping": 4, - "value": 31.98 - }, - "platform": "web", - "app_version": "1.1.6", - "current_time": "2020-10-16T13:40:12.791+05:30", - "user_timezone_offset": 32400 - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api-01.moengage.com/v1/customer/W0ZHNMPI2O4KHJ48ZILZACRA", - "headers": { - "Content-Type": "application/json", - "MOE-APPKEY": "W0ZHNMPI2O4KHJ48ZILZACRA", - "Authorization": "Basic VzBaSE5NUEkyTzRLSEo0OFpJTFpBQ1JBOmR1bW15QXBpS2V5" - }, - "params": {}, - "body": { - "JSON": { - "customer_id": "rudder123", - "type": "customer", - "attributes": { - "name": "Rudder Test", - "email": "rudderTest@gmail.com", - "created_time": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "company.id": "abc123", - "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", - "plan": "Enterprise" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "1iuTZs6eEZVMm6GjRBe6bNShaL3", - "Name": "MoEngage Testing", - "DestinationDefinition": { - "ID": "1iu4802Tx27kNC4KNYYou6D8jzL", - "Name": "MOENGAGE", - "DisplayName": "MoEngage", - "Config": { - "destConfig": { - "defaultConfig": ["apiId", "apiKey", "region"] - }, - "excludeKeys": [], - "includeKeys": [], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"] - } - }, - "Config": { - "apiId": "W0ZHNMPI2O4KHJ48ZILZACRA", - "apiKey": "dummyApiKey", - "eventDelivery": false, - "eventDeliveryTS": 1602757086384, - "region": "US" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/monetate_input.json b/test/__tests__/data/monetate_input.json deleted file mode 100644 index 2b784e98ca..0000000000 --- a/test/__tests__/data/monetate_input.json +++ /dev/null @@ -1,1860 +0,0 @@ -[ - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "product_id": "prodId" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product List Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "products": [ - { - "product_id": 1 - }, - { - "product_id": 2 - } - ] - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Added", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "currency": "INR", - "product_id": 1, - "quantity": 1, - "cart_value": 250, - "sku": "sku" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Signed Up", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "plan": "trial", - "source": "social" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "name": "Homepage", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "page": { - "url": "https://example.com/homepage", - "path": "/homepage", - "referrer": "https://google.com" - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "screen", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "name": "Homepage", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "page": { - "url": "https://example.com/homepage", - "path": "/homepage", - "referrer": "https://google.com", - "category": "category" - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "page", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "page": { - "url": "https://example.com/homepage", - "referrer": "https://google.com" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "name": "Homepage", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "path": "/homepage", - "referrer": "https://google.com", - "url": "https://example.com/homepage" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "page", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Added", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "currency": "INR", - "product_id": 1, - "quantity": 1, - "cart_value": 250, - "page": { - "url": "url", - "path": "path", - "category": "category", - "breadcrumbs": "breadcrumbs" - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "identify", - "sentAt": "2020-09-03T05:48:50.813Z", - "userId": "user101", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Bangalore", - "name": "Manashi", - "country": "India" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "ab1bb13b-037e-4269-b7ce-79262fbfd964", - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.813Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Product Added", - "sentAt": "2020-09-03T05:48:50.815Z", - "userId": "user101", - "channel": "web", - "context": { - "ip": "11.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Bangalore", - "name": "Manashi", - "country": "India" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "0189ef26-5b64-47af-bd4a-f369155b74b0", - "properties": { - "cart_value": 30, - "product_id": "pp10001900011", - "user_actual_id": 12345 - }, - "anonymousId": "anony11111111", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.814Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "name": "Home Page", - "type": "page", - "sentAt": "2020-09-03T05:48:50.816Z", - "userId": "user101", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://google.com", - "path": "https://google.com", - "title": "MIxpanel Test", - "search": "", - "referrer": "google" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Bangalore", - "name": "Manashi", - "country": "India" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "1d263f9b-d5e9-4a3b-ae4a-403129ef9b7c", - "properties": { - "url": "https://google.com", - "name": "Home Page", - "path": "https://google.com", - "title": "MIxpanel Test", - "search": "", - "referrer": "google" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.816Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "name": "Login Page Name", - "type": "page", - "sentAt": "2020-09-03T05:48:50.820Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "22.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://geeks.com", - "path": "https://geeks.com", - "title": "LOGIN PAGE OF GEEKSFORGEEKS", - "search": "", - "referrer": "geeksforgeeks" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "userId": "user202", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "category": "Login Category", - "messageId": "8073f133-14cc-4b6b-8043-9e5bb8d17698", - "properties": { - "url": "https://geeks.com", - "name": "Login Page Name", - "path": "https://geeks.com", - "title": "LOGIN PAGE OF GEEKSFORGEEKS", - "search": "", - "category": "Login Category", - "referrer": "geeksforgeeks" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.819Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Cart Viewed", - "sentAt": "2020-09-03T05:48:50.820Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "22.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "21e78620-748a-4c1c-8570-385206fc61d6", - "properties": { - "products": [ - { - "details": "Apple iphone 7", - "currency": "INR", - "quantity": "1", - "product_id": "p2022222" - }, - { - "price": "90", - "details": "Apple iphone 8", - "quantity": "2", - "product_id": "p201111" - } - ] - }, - "anonymousId": "anony222222222", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.820Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "cutom event track call", - "sentAt": "2020-09-03T05:48:50.821Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "11.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "userId": "user101", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "be896347-8e93-4e11-8d0a-67f08b33d969", - "properties": { - "details": "this is custom trackl call" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.821Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "name": "My orders Page Name", - "type": "page", - "sentAt": "2020-09-03T05:48:50.822Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "33.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "https://geeks.com", - "title": "MIxpanel Test", - "search": "", - "referrer": "geeksforgeeks" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "e142299a-e819-4590-b99f-9f74d30d6354", - "properties": { - "url": "http://localhost:1111/monetateRudder.html", - "name": "My orders Page Name", - "path": "https://geeks.com", - "title": "MIxpanel Test", - "search": "", - "referrer": "geeksforgeeks" - }, - "anonymousId": "anony33333333", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.821Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Product Viewed", - "sentAt": "2020-09-03T05:48:50.823Z", - "userId": "user202", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "userId": "user101", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "5fc62a0d-835b-45c9-bfea-f2f5e57340db", - "properties": { - "sku": "123", - "products": [ - { - "product_id": "p1234678" - } - ], - "product_id": "P303333333" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.822Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "name": "ONly page name", - "type": "page", - "sentAt": "2020-09-03T05:48:50.823Z", - "userId": "user202", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "1aca7c68-148e-4ef3-a828-d89daf403632", - "properties": { - "url": "http://localhost:1111/monetateRudder.html", - "name": "ONly page name", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.823Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-09-03T05:48:50.824Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "11.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "moneateId": "Monetate10111111", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "19ef9a4e-fb49-42f2-8eba-b0bb7c934289", - "properties": { - "order_id": "orderCompleted101", - "products": [ - { - "sku": "sku 1 for order completed", - "price": 8900, - "currency": "INR", - "quantity": 1, - "product_id": "p2022222" - }, - { - "sku": "sku 2 for order completed", - "price": 90, - "quantity": 2, - "product_id": "p201111" - } - ] - }, - "anonymousId": "anony11111111", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.824Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-09-03T05:48:50.824Z", - "channel": "web", - "context": { - "ip": "11.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "moneateId": "Monetate10111111", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "19ef9a4e-fb49-42f2-8eba-b0bb7c934289", - "properties": { - "order_id": "orderCompleted101", - "products": [ - { - "sku": "sku 1 for order completed", - "price": 8900, - "currency": "INR", - "quantity": 1, - "product_id": "p2022222" - }, - { - "sku": "sku 2 for order completed", - "price": 90, - "quantity": 2, - "product_id": "p201111" - } - ] - }, - "anonymousId": "anony11111111", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.824Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "name": "ip check page name", - "type": "page", - "sentAt": "2020-09-03T05:48:50.825Z", - "userId": "user202", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://facebook.com", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Sydney", - "phone": "909077777", - "country": "Australia" - }, - "userId": "user606", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "category": "ip check page category", - "messageId": "d6aeaf93-d28b-4a60-b8af-2376bebc4094", - "properties": { - "url": "https://facebook.com", - "name": "ip check page name", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "category": "ip check page category", - "referrer": "http://localhost:1111/" - }, - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.825Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "identify", - "sentAt": "2020-09-04T08:59:41.568Z", - "userId": "user202", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Bangalore", - "name": "Manashi", - "email": "rudder@mysite.com", - "country": "India" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "6debe993-9b1e-40ca-b2de-9054e86bcdd0", - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-04T08:59:41.567Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "sentAt": "2020-09-04T08:59:41.568Z", - "userId": "user202", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "city": "Bangalore", - "name": "Manashi", - "email": "rudder@mysite.com", - "country": "India" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "6debe993-9b1e-40ca-b2de-9054e86bcdd0", - "anonymousId": "RudderEncrypt:U2FsdGVkX19Iqki3tnJjjeUzFWOegZjPY3iYQOPJJSQaTUxTWedGBeEOyFE/hfddGtmaZJnf/HBtc/EDoRjKEA==", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-04T08:59:41.567Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "density": 2 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "name": "Homepage", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "page": { - "url": "https://example.com/homepage", - "path": "/homepage", - "referrer": "https://google.com" - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "screen", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Order Completed", - "sentAt": "2020-09-03T05:48:50.824Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "11.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "moneateId": "Monetate10111111", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "19ef9a4e-fb49-42f2-8eba-b0bb7c934289", - "properties": { - "order_id": "orderCompleted101", - "products": [ - { - "sku": "sku 1 for order completed", - "price": "8900", - "currency": "INR", - "quantity": "1" - }, - { - "sku": "sku 2 for order completed", - "price": "90", - "quantity": "2", - "product_id": "p201111" - } - ] - }, - "anonymousId": "anony11111111", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.824Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "type": "track", - "event": "Cart Viewed", - "sentAt": "2020-09-03T05:48:50.820Z", - "userId": "user202", - "channel": "web", - "context": { - "ip": "22.0.0.0", - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.3", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html", - "title": "MIxpanel Test", - "search": "", - "referrer": "http://localhost:1111/" - }, - "locale": "en-GB", - "screen": { - "density": 2.5 - }, - "traits": { - "email": "rudder@mysite.com" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.3" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - "messageId": "21e78620-748a-4c1c-8570-385206fc61d6", - "properties": { - "products": [ - { - "details": "Apple iphone 7", - "currency": "INR", - "quantity": 1, - "price": 2345, - "product_id": "p2022222" - }, - { - "price": 90, - "details": "Apple iphone 8", - "quantity": 2, - "product_id": "p201111" - } - ] - }, - "anonymousId": "anony222222222", - "integrations": { - "All": true - }, - "originalTimestamp": "2020-09-03T05:48:50.820Z" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Added", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "currency": "INR", - "quantity": 1, - "cart_value": 250, - "sku": "sku" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product List Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "products": [ - {}, - { - "product_id": 2 - } - ] - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product List Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "products": { - "product_id": "1" - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - } -] diff --git a/test/__tests__/data/monetate_output.json b/test/__tests__/data/monetate_output.json deleted file mode 100644 index 82d5f8de22..0000000000 --- a/test/__tests__/data/monetate_output.json +++ /dev/null @@ -1,741 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "monetateId": "1234", - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:ProductDetailView", - "products": [ - { - "productId": "prodId", - "sku": "" - } - ] - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "'product_id' is a required field for Product Viewed" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "monetateId": "1234", - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:ProductThumbnailView", - "products": ["1", "2"] - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "monetateId": "1234", - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:Cart", - "cartLines": [ - { - "pid": "1", - "sku": "sku", - "quantity": 1, - "value": "250", - "currency": "INR" - } - ] - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "https://example.com/homepage", - "path": "/homepage", - "categories": ["category"] - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "https://google.com" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "https://example.com/homepage" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "https://google.com" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:PageView", - "url": "url", - "path": "path", - "categories": ["category"], - "breadcrumbs": ["breadcrumbs"] - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:Cart", - "cartLines": [ - { - "pid": "1", - "sku": "", - "quantity": 1, - "value": "250", - "currency": "INR" - } - ] - } - ], - "customerId": "newUser" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "Event type identify is not supported" - }, - { - "statusCode": 400, - "error": "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "https://google.com", - "path": "https://google.com" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "google" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "https://geeks.com", - "path": "https://geeks.com" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "geeksforgeeks" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Cart Viewed" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "11.0.0.0" - }, - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:UserAgent", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - } - ], - "customerId": "user202", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "https://geeks.com" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "geeksforgeeks" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:UserAgent", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - { - "eventType": "monetate:context:ProductDetailView", - "products": [ - { - "productId": "P303333333", - "sku": "123" - } - ] - } - ], - "customerId": "user202", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "http://localhost:1111/" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "11.0.0.0" - }, - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:UserAgent", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - { - "eventType": "monetate:context:Purchase", - "purchaseId": "orderCompleted101", - "purchaseLines": [ - { - "pid": "p2022222", - "sku": "sku 1 for order completed", - "quantity": 1, - "value": "8900.00", - "currency": "INR" - }, - { - "pid": "p201111", - "sku": "sku 2 for order completed", - "quantity": 2, - "value": "180.00", - "currency": "USD" - } - ] - } - ], - "customerId": "user202", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "11.0.0.0" - }, - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:UserAgent", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - { - "eventType": "monetate:context:Purchase", - "purchaseId": "orderCompleted101", - "purchaseLines": [ - { - "pid": "p2022222", - "sku": "sku 1 for order completed", - "quantity": 1, - "value": "8900.00", - "currency": "INR" - }, - { - "pid": "p201111", - "sku": "sku 2 for order completed", - "quantity": 2, - "value": "180.00", - "currency": "USD" - } - ] - } - ], - "deviceId": "anony11111111", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:PageView", - "url": "https://facebook.com", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:Referrer", - "referrer": "http://localhost:1111/" - } - ], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "Event type identify is not supported" - }, - { - "error": "Event type is required" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [], - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Order Completed" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "22.0.0.0" - }, - { - "eventType": "monetate:context:PageView", - "url": "http://localhost:1111/monetateRudder.html", - "path": "/monetateRudder.html" - }, - { - "eventType": "monetate:context:UserAgent", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" - }, - { - "eventType": "monetate:context:Cart", - "cartLines": [ - { - "pid": "p2022222", - "sku": "", - "quantity": 1, - "value": "2345.00", - "currency": "INR" - }, - { - "pid": "p201111", - "sku": "", - "quantity": 2, - "value": "180.00", - "currency": "USD" - } - ] - } - ], - "customerId": "user202", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added" - }, - { - "statusCode": 400, - "error": "'product_id' is a required field for all products for Product List Viewed" - }, - { - "statusCode": 400, - "error": "'product_id' is a required field for Product Viewed" - }, - { - "statusCode": 400, - "error": "'products' missing or not array in Product List Viewed" - } -] diff --git a/test/__tests__/data/monetate_router_input.json b/test/__tests__/data/monetate_router_input.json deleted file mode 100644 index 0571fac96f..0000000000 --- a/test/__tests__/data/monetate_router_input.json +++ /dev/null @@ -1,129 +0,0 @@ -[ - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "product_id": "prodId" - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "screen": { - "height": 22, - "width": 11 - }, - "device": { - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "manufacturer": "Xiaomi", - "model": "Redmi 6", - "name": "xiaomi" - }, - "network": { - "carrier": "Banglalink" - }, - "os": { - "name": "android", - "version": "8.1.0" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "0.0.0.0" - }, - "traits": { - "address": { - "city": "Kol", - "country": "Ind" - } - }, - "event": "Product List Viewed", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "monetateId": "1234", - "products": [ - { - "product_id": 1 - }, - { - "product_id": 2 - } - ] - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "userId": "newUser" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - } -] diff --git a/test/__tests__/data/monetate_router_output.json b/test/__tests__/data/monetate_router_output.json deleted file mode 100644 index 14018aafc5..0000000000 --- a/test/__tests__/data/monetate_router_output.json +++ /dev/null @@ -1,111 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "monetateId": "1234", - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:ProductDetailView", - "products": [ - { - "productId": "prodId", - "sku": "" - } - ] - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://engine.monetate.net/api/engine/v1/decide/retailer", - "headers": { - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "monetateId": "1234", - "events": [ - { - "eventType": "monetate:context:IpAddress", - "ipAddress": "0.0.0.0" - }, - { - "eventType": "monetate:context:ScreenSize", - "height": 22, - "width": 11 - }, - { - "eventType": "monetate:context:ProductThumbnailView", - "products": ["1", "2"] - } - ], - "customerId": "newUser", - "channel": "channel" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "monetateChannel": "channel", - "retailerShortName": "retailer", - "apiKey": "api-key" - } - } - } -] diff --git a/test/__tests__/data/new_relic_cdk_output.json b/test/__tests__/data/new_relic_cdk_output.json deleted file mode 100644 index 9789b7d48e..0000000000 --- a/test/__tests__/data/new_relic_cdk_output.json +++ /dev/null @@ -1,204 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "first", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "second", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": "test", - "eventType": "rudderstack" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudder-testing" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "first", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "second", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": "test", - "eventType": "rudderstack" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "userId": "identified user id", - "anonymousId": "anon-id-new", - "eventType": "rudder-testing" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "anonymousId": "anon-id-new", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "message type identify is not supported" - } -] diff --git a/test/__tests__/data/new_relic_input.json b/test/__tests__/data/new_relic_input.json deleted file mode 100644 index 16bd601816..0000000000 --- a/test/__tests__/data/new_relic_input.json +++ /dev/null @@ -1,418 +0,0 @@ -[ - { - "message": { - "event": "first", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": true, - "sendUserIdanonymousId": true, - "dataCenter": "us" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "second", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": "test" - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": false, - "sendUserIdanonymousId": false, - "dataCenter": "us" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "test", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "rudder-testing", - "sendDeviceContext": false, - "sendUserIdanonymousId": false, - "dataCenter": "us" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "first", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": true, - "sendUserIdanonymousId": true, - "dataCenter": "eu" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "second", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": "test" - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": false, - "sendUserIdanonymousId": false, - - "dataCenter": "eu" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "test", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "rudder-testing", - "sendDeviceContext": false, - "sendUserIdanonymousId": true, - "dataCenter": "eu" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "test", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": true, - "sendUserIdanonymousId": true, - "dataCenter": "us" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "first", - "userId": "identified user id", - "type": "identify", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "traits": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "sentAt": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-02-02T00:23:09.544Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "accountId": "12345", - "insertKey": "11111122702j2a2U2K2C7H", - "customEventType": "", - "sendDeviceContext": true, - "sendUserIdanonymousId": true, - "dataCenter": "us" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/new_relic_output.json b/test/__tests__/data/new_relic_output.json deleted file mode 100644 index 0ca0a6bdbd..0000000000 --- a/test/__tests__/data/new_relic_output.json +++ /dev/null @@ -1,204 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "first", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "second", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": "test", - "eventType": "rudderstack" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudder-testing" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "first", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "userId": "identified user id", - "anonymousId": "anon-id-new", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "second", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": "test", - "eventType": "rudderstack" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.eu01.nr-data.net/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "userId": "identified user id", - "anonymousId": "anon-id-new", - "eventType": "rudder-testing" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://insights-collector.newrelic.com/v1/accounts/12345/events", - "headers": { - "Api-Key": "11111122702j2a2U2K2C7H", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "test", - "timestamp": 1580602989, - "abc": "123", - "anonymousId": "anon-id-new", - "key.abc": 123, - "array[0].abc": 123, - "array[1].def": 123, - "eventType": "rudderstack", - "traits.trait1": "new-val", - "ip": "14.5.67.21", - "library.name": "http" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "statusCode": 400, - "error": "message type \"identify\" not supported for \"new_relic\"" - } -] diff --git a/test/__tests__/data/ometria_batch_input.json b/test/__tests__/data/ometria_batch_input.json deleted file mode 100644 index 982b50607b..0000000000 --- a/test/__tests__/data/ometria_batch_input.json +++ /dev/null @@ -1,219 +0,0 @@ -[ - { - "message": { - "type": "identify", - "sentAt": "2021-10-25T09:40:08.880Z", - "userId": "userId1", - "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": { - "listingId": "test1", - "email": "testone@gmail.com", - "firstName": "test", - "lastName": "one", - "field1": "val1", - "ip": "0.0.0.0" - }, - "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", - "receivedAt": "2021-10-25T15:10:08.889+05:30", - "request_ip": "[::1]", - "anonymousId": "7138f7d9-5dd2-4337-805d-ca17be59dc8e", - "integrations": { - "Ometria": { - "listingId": "test1" - } - }, - "originalTimestamp": "2021-10-25T09:40:08.879Z" - }, - "metadata": { "jobId": 1 }, - "destination": { - "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V", - "Name": "ometria-dev", - "DestinationDefinition": { - "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH", - "Name": "OMETRIA", - "DisplayName": "Ometria", - "Config": { - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova" - ], - "supportedMessageTypes": ["identify", "track"], - "destConfig": { - "defaultConfig": ["apiKey", "marketingOptin", "allowMarketing", "allowTransactional"] - }, - "secretKeys": ["apiKey"] - }, - "ResponseRules": {} - }, - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "type": "identify", - "sentAt": "2021-10-25T09:40:08.880Z", - "anonymousId": "123456", - "userId": "userId1", - "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": { - "listingId": "test1", - "email": "testone@gmail.com", - "firstName": "test", - "lastName": "one", - "field1": "val1", - "ip": "0.0.0.0" - }, - "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", - "receivedAt": "2021-10-25T15:10:08.889+05:30", - "request_ip": "[::1]", - "integrations": { - "Ometria": { - "listingId": "updatedId1", - "allowMarketing": true - } - }, - "originalTimestamp": "2021-10-25T09:40:08.879Z" - }, - "metadata": { "jobId": 2 }, - "destination": { - "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V", - "Name": "ometria-dev", - "DestinationDefinition": { - "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH", - "Name": "OMETRIA", - "DisplayName": "Ometria", - "Config": { - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova" - ], - "supportedMessageTypes": ["identify", "track"], - "destConfig": { - "defaultConfig": ["apiKey", "marketingOptin", "allowMarketing", "allowTransactional"] - }, - "secretKeys": ["apiKey"] - }, - "ResponseRules": {} - }, - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/ometria_batch_output.json b/test/__tests__/data/ometria_batch_output.json deleted file mode 100644 index f93e662d26..0000000000 --- a/test/__tests__/data/ometria_batch_output.json +++ /dev/null @@ -1,75 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { - "X-Ometria-Auth": "dummyApiKey" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"test1\",\"customer_id\":\"userId1\",\"firstname\":\"test\",\"lastname\":\"one\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\",\"ip\":\"0.0.0.0\"},\"marketing_optin\":\"EXPLICITLY_OPTEDOUT\",\"channels\":{\"sms\":{\"allow_marketing\":false,\"allow_transactional\":false}}},{\"email\":\"testone@gmail.com\",\"id\":\"updatedId1\",\"customer_id\":\"userId1\",\"firstname\":\"test\",\"lastname\":\"one\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\",\"ip\":\"0.0.0.0\"},\"marketing_optin\":\"EXPLICITLY_OPTEDOUT\",\"channels\":{\"sms\":{\"allow_marketing\":true,\"allow_transactional\":false}}}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - }, - { - "jobId": 2 - } - ], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V", - "Name": "ometria-dev", - "DestinationDefinition": { - "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH", - "Name": "OMETRIA", - "DisplayName": "Ometria", - "Config": { - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova" - ], - "supportedMessageTypes": ["identify", "track"], - "destConfig": { - "defaultConfig": ["apiKey", "marketingOptin", "allowMarketing", "allowTransactional"] - }, - "secretKeys": ["apiKey"] - }, - "ResponseRules": {} - }, - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/data/ometria_input.json b/test/__tests__/data/ometria_input.json deleted file mode 100644 index de03a585f8..0000000000 --- a/test/__tests__/data/ometria_input.json +++ /dev/null @@ -1,780 +0,0 @@ -[ - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "listingId": "test1", - "email": "testone@gmail.com", - "firstName": "test", - "lastName": "one", - "field1": "val1", - "ip": "0.0.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 - }, - "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": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "userId1", - "integrations": { - "Ometria": { - "listingId": "test1" - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "listingId": "test1", - "email": "testone@gmail.com", - "firstName": "test", - "lastName": "one", - "field1": "val1", - "ip": "0.0.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 - }, - "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": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "userId1", - "integrations": { - "Ometria": { - "listingId": "updatedId1", - "allowMarketing": true - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "listingId": "test1", - "email": "testone@gmail.com", - "name": "test one two", - "field1": "val1", - "ip": "0.0.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 - }, - "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": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "userId1", - "integrations": { - "Ometria": { - "listingId": "test1" - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "EXPLICITLY_OPTEDOUT" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "listingId": "test1", - "email": "testone@gmail.com", - "name": "test one", - "field1": "val1", - "marketinOptin": "NOT_SPECIFIED", - "phoneNumber": "+911234567890", - "channels": { - "sms": {} - } - }, - "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": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "userId1", - "integrations": { - "Ometria": { - "listingId": "test1" - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "NOT_SPECIFIED" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "listingId": "test1", - "email": "testone@gmail.com", - "name": "test one", - "field1": "val1", - "marketinOptin": "NOT_SPECIFIED", - "phoneNumber": "+911234567890", - "channels": { - "sms": {} - } - }, - "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": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", - "userId": "userId1", - "integrations": { - "Ometria": { - "listingId": "test1", - "allowMarketing": true, - "allowTransactional": true - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "allowMarketing": false, - "allowTransactional": false, - "marketingOptin": "NOT_SPECIFIED" - } - } - }, - { - "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": "userId1", - "event": "event name", - "properties": { - "event_id": "eventId1", - "timestamp": "2017-05-01T14:00:00Z", - "field1": "val1" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - { - "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": "userId1", - "event": "order completed", - "properties": { - "order_id": "orderId1", - "timestamp": "2017-05-01T14:00:00Z", - "grand_total": 1000, - "currency": "INR", - "field1": "val1" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - { - "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": "userId1", - "event": "order completed", - "properties": { - "order_id": "orderId1", - "timestamp": "2017-05-01T14:00:00Z", - "grand_total": 1000, - "currency": "INR", - "field1": "val1", - "products": [ - { - "product_id": "prod123", - "quantity": 4, - "subtotal": 10 - } - ] - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - { - "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": "userId1", - "event": "order completed", - "properties": { - "order_id": "orderId1", - "timestamp": "2017-05-01T14:00:00Z", - "grand_total": 1000, - "currency": "INR", - "field1": "val1", - "products": [ - { - "product_id": "prod123", - "quantity": 4, - "subtotal": 10, - "variant_options": [ - { - "type": "size", - "id": "newid", - "label": "5" - } - ] - } - ] - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - { - "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": "userId1", - "event": "order completed", - "properties": { - "order_id": "orderId1", - "timestamp": "2017-05-01T14:00:00Z", - "grand_total": 1000, - "currency": "INR", - "field1": "val1", - "billing_address": "Ba", - "shipping_address": "Sa", - "products": [ - { - "product_id": "prod123", - "quantity": 4, - "subtotal": 10, - "variant_options": [ - { - "type": "size", - "id": "newid", - "label": "5" - } - ] - } - ] - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - }, - { - "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": "userId1", - "event": "order completed", - "properties": { - "order_id": "orderId1", - "timestamp": "2017-05-01T14:00:00Z", - "grand_total": 1000, - "currency": "INR", - "field1": "val1", - "shipping_address": { - "city": "Kolkata", - "state": "West Bengal", - "postcode": "700001", - "country_code": "IN" - }, - "products": [ - { - "product_id": "prod123", - "quantity": 4, - "subtotal": 10, - "variant_options": [ - { - "type": "size", - "id": "newid", - "label": "5" - } - ] - } - ] - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "Config": { - "apiKey": "dummyApiKey" - } - } - } -] diff --git a/test/__tests__/data/ometria_output.json b/test/__tests__/data/ometria_output.json deleted file mode 100644 index cd41f44d24..0000000000 --- a/test/__tests__/data/ometria_output.json +++ /dev/null @@ -1,189 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"test1\",\"customer_id\":\"userId1\",\"firstname\":\"test\",\"lastname\":\"one\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\",\"ip\":\"0.0.0.0\"},\"marketing_optin\":\"EXPLICITLY_OPTEDOUT\",\"channels\":{\"sms\":{\"allow_marketing\":false,\"allow_transactional\":false}}}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"updatedId1\",\"customer_id\":\"userId1\",\"firstname\":\"test\",\"lastname\":\"one\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\",\"ip\":\"0.0.0.0\"},\"marketing_optin\":\"EXPLICITLY_OPTEDOUT\",\"channels\":{\"sms\":{\"allow_marketing\":true,\"allow_transactional\":false}}}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"test1\",\"customer_id\":\"userId1\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\",\"ip\":\"0.0.0.0\"},\"marketing_optin\":\"EXPLICITLY_OPTEDOUT\",\"channels\":{\"sms\":{\"allow_marketing\":false,\"allow_transactional\":false}},\"firstname\":\"test\",\"middlename\":\"one\",\"lastname\":\"two\"}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"test1\",\"phone_number\":\"+911234567890\",\"customer_id\":\"userId1\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\"},\"marketing_optin\":\"NOT_SPECIFIED\",\"channels\":{\"sms\":{\"allow_marketing\":false,\"allow_transactional\":false}},\"firstname\":\"test\",\"lastname\":\"one\"}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"email\":\"testone@gmail.com\",\"id\":\"test1\",\"phone_number\":\"+911234567890\",\"customer_id\":\"userId1\",\"@type\":\"contact\",\"properties\":{\"field1\":\"val1\"},\"marketing_optin\":\"NOT_SPECIFIED\",\"channels\":{\"sms\":{\"allow_marketing\":true,\"allow_transactional\":true}},\"firstname\":\"test\",\"lastname\":\"one\"}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"eventId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"identity_email\":\"testone@gmail.com\",\"identity_account_id\":\"userId1\",\"@type\":\"custom_event\",\"event_type\":\"event name\",\"properties\":{\"field1\":\"val1\"}}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"orderId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"grand_total\":1000,\"currency\":\"INR\",\"ip_address\":\"0.0.0.0\",\"customer\":{\"id\":\"userId1\",\"email\":\"testone@gmail.com\",\"firstname\":\"test\",\"lastname\":\"one\"},\"@type\":\"order\",\"status\":\"complete\",\"is_valid\":true,\"properties\":{\"field1\":\"val1\"}}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"orderId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"grand_total\":1000,\"currency\":\"INR\",\"ip_address\":\"0.0.0.0\",\"customer\":{\"id\":\"userId1\",\"email\":\"testone@gmail.com\",\"firstname\":\"test\",\"lastname\":\"one\"},\"@type\":\"order\",\"status\":\"complete\",\"is_valid\":true,\"properties\":{\"field1\":\"val1\"},\"lineitems\":[{\"product_id\":\"prod123\",\"quantity\":4,\"subtotal\":10}]}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"orderId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"grand_total\":1000,\"currency\":\"INR\",\"ip_address\":\"0.0.0.0\",\"customer\":{\"id\":\"userId1\",\"email\":\"testone@gmail.com\",\"firstname\":\"test\",\"lastname\":\"one\"},\"@type\":\"order\",\"status\":\"complete\",\"is_valid\":true,\"properties\":{\"field1\":\"val1\"},\"lineitems\":[{\"product_id\":\"prod123\",\"quantity\":4,\"subtotal\":10,\"variant_options\":[{\"id\":\"newid\",\"type\":\"size\",\"label\":\"5\"}]}]}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"orderId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"grand_total\":1000,\"currency\":\"INR\",\"ip_address\":\"0.0.0.0\",\"customer\":{\"id\":\"userId1\",\"email\":\"testone@gmail.com\",\"firstname\":\"test\",\"lastname\":\"one\"},\"@type\":\"order\",\"status\":\"complete\",\"is_valid\":true,\"properties\":{\"field1\":\"val1\"},\"lineitems\":[{\"product_id\":\"prod123\",\"quantity\":4,\"subtotal\":10,\"variant_options\":[{\"id\":\"newid\",\"type\":\"size\",\"label\":\"5\"}]}]}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.ometria.com/v2/push", - "headers": { "X-Ometria-Auth": "dummyApiKey" }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"id\":\"orderId1\",\"timestamp\":\"2017-05-01T14:00:00Z\",\"grand_total\":1000,\"currency\":\"INR\",\"ip_address\":\"0.0.0.0\",\"shipping_address\":{\"city\":\"Kolkata\",\"state\":\"West Bengal\",\"country_code\":\"IN\",\"postcode\":\"700001\"},\"customer\":{\"id\":\"userId1\",\"email\":\"testone@gmail.com\",\"firstname\":\"test\",\"lastname\":\"one\"},\"@type\":\"order\",\"status\":\"complete\",\"is_valid\":true,\"properties\":{\"field1\":\"val1\"},\"lineitems\":[{\"product_id\":\"prod123\",\"quantity\":4,\"subtotal\":10,\"variant_options\":[{\"id\":\"newid\",\"type\":\"size\",\"label\":\"5\"}]}]}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/one_signal.json b/test/__tests__/data/one_signal.json deleted file mode 100644 index da699ec0ef..0000000000 --- a/test/__tests__/data/one_signal.json +++ /dev/null @@ -1,1431 +0,0 @@ -[ - { - "description": "Identify call for creating new device (phone and playerId is not available in the payload). Integrations object is also not available.", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": true, - "smsDeviceType": true, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Test", - "email": "test@rudderstack.com", - "userId": "user@27" - }, - "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": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 11, - "identifier": "test@rudderstack.com", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 8, - "identifier": "97c46c81-3140-456d-b2a9-690d70aaca35", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Identify call for creating new device (playerId is not available in the payload). Integrations object is also not available. Email and phone both are available in the payload.", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": true, - "smsDeviceType": true, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27" - }, - "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": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 11, - "identifier": "test@rudderstack.com", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 14, - "identifier": "+917836362334", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 8, - "identifier": "97c46c81-3140-456d-b2a9-690d70aaca35", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Identify call for creating a new device(deviceType and identifier is present in the integrations object, playerId not present)", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27" - }, - "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" - }, - "integrations": { - "one_signal": { - "deviceType": "5", - "identifier": "random_id" - } - }, - "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": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 5, - "identifier": "random_id", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Identify call for creating a new device(channel is mobile and integrations object is not present, playerId not present)", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "mobile", - "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": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27" - }, - "locale": "en-US", - "device": { - "token": "token", - "id": "id", - "type": "android" - }, - "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": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 1, - "identifier": "token", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ] - }, - { - "description": "Identify call for Editing a device using playerId", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "mobile", - "context": { - "externalId": [ - { - "type": "playerId", - "id": "85be324d-6dab-4293-ad1f-42199d4c455b" - } - ], - "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": "Raymonds", - "price": "14000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27" - }, - "locale": "en-US", - "device": { - "token": "token", - "id": "id", - "type": "android" - }, - "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": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://onesignal.com/api/v1/players/85be324d-6dab-4293-ad1f-42199d4c455b", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "tags": { - "brand": "Raymonds", - "price": "14000", - "firstName": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call for updating tags using external_user_id", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "brand": "Zara", - "price": "12000", - "add_to_Cart": true - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - } - }, - { - "description": "Track call for updating tags using external_user_id (with concatenated event name)", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "add_to_Cart": true, - "add_to_Cart_brand": "Zara", - "add_to_Cart_price": "12000" - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - } - }, - { - "description": "Track call with tags key having empty value( Output Behaviour: Those keys will be deleted)", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "properties": { - "brand": "", - "price": "" - }, - "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": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "add_to_Cart": true, - "add_to_Cart_brand": "", - "add_to_Cart_price": "" - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - } - }, - { - "description": "Track call having no allowed properties)", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "properties": { - "brand": "zara", - "price": "10000" - }, - "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": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "add_to_Cart": true - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - } - }, - { - "description": "Group call ", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "type": "group", - "groupId": "players111", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "brand": "", - "price": "10000" - }, - "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": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "brand": "", - "price": "10000", - "groupId": "players111" - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - } - }, - { - "description": "Check for appId", - "input": { - "destination": { - "Config": { - "appId": "", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "type": "group", - "groupId": "players111", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "brand": "", - "price": "10000" - }, - "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": "appId is a required field" - } - }, - { - "description": "Check for message type", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "type": "page", - "groupId": "players111", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "brand": "", - "price": "10000" - }, - "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 page is not supported" - } - }, - { - "description": "Validating deviceType", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Test", - "email": "test@rudderstack.com", - "phone": "+917836362334", - "userId": "user@27" - }, - "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" - }, - "integrations": { - "one_signal": { - "deviceType": "15", - "identifier": "random_id" - } - }, - "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": "device_type 15 is not a valid device_type" - } - }, - { - "description": "check for Message type not present", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "event": "add_to_Cart", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Event type is required" - } - }, - { - "description": "Check for event name in the track call", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Event is not present in the input payloads" - } - }, - { - "description": "Check for groupId ", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": true, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "type": "group", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "brand": "", - "price": "10000" - }, - "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": "groupId is required for group events" - } - }, - { - "description": "Check for user Id (required field to update the device) for track call", - "input": { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "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": "userId is required for track events/updating a device" - } - } -] diff --git a/test/__tests__/data/one_signal_router_input.json b/test/__tests__/data/one_signal_router_input.json deleted file mode 100644 index 3b69aaadd7..0000000000 --- a/test/__tests__/data/one_signal_router_input.json +++ /dev/null @@ -1,118 +0,0 @@ -[ - { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": true, - "smsDeviceType": true, - "eventAsTags": false, - "allowedProperties": [] - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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": "Test", - "email": "test@rudderstack.com", - "userId": "user@27" - }, - "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" - } - }, - { - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - }, - "metadata": { - "jobId": 2 - }, - "message": { - "event": "add_to_Cart", - "type": "track", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@27", - "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" - } - } -] diff --git a/test/__tests__/data/one_signal_router_output.json b/test/__tests__/data/one_signal_router_output.json deleted file mode 100644 index bda0c36336..0000000000 --- a/test/__tests__/data/one_signal_router_output.json +++ /dev/null @@ -1,141 +0,0 @@ -[ - { - "batchedRequest": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 11, - "identifier": "test@rudderstack.com", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://onesignal.com/api/v1/players", - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "device_os": "1.12.3", - "laguage": "en-US", - "created_at": 1609693373, - "last_active": 1609693373, - "external_user_id": "user@27", - "app_id": "random-818c-4a28-b98e-6cd8a994eb22", - "device_type": 8, - "identifier": "97c46c81-3140-456d-b2a9-690d70aaca35", - "tags": { - "brand": "John Players", - "price": "15000", - "firstName": "Test", - "email": "test@rudderstack.com", - "userId": "user@27", - "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - ], - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": true, - "smsDeviceType": true, - "eventAsTags": false, - "allowedProperties": [] - } - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "tags": { - "brand": "Zara", - "price": "12000", - "add_to_Cart": true - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Accept": "application/json", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "appId": "random-818c-4a28-b98e-6cd8a994eb22", - "emailDeviceType": false, - "smsDeviceType": false, - "eventAsTags": false, - "allowedProperties": [ - { - "propertyName": "brand" - }, - { - "propertyName": "price" - } - ] - } - } - } -] diff --git a/test/__tests__/data/pagerduty.json b/test/__tests__/data/pagerduty.json deleted file mode 100644 index fdc97ea317..0000000000 --- a/test/__tests__/data/pagerduty.json +++ /dev/null @@ -1,569 +0,0 @@ -[ - { - "description": "No Message type", - "input": { - "message": { - "sentAt": "2022-10-11T13:10:54.877+05:30", - "userId": "user@45", - "rudderId": "caae04c5-959f-467b-a293-86f6c62d59e6", - "messageId": "b6ce7f31-5d76-4240-94d2-3eea020ef791", - "timestamp": "2022-10-11T13:10:52.137+05:30", - "receivedAt": "2022-10-11T13:10:52.138+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-10-11T13:10:54.877+05:30" - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac" - } - } - }, - "output": { - "error": "Event type is required" - } - }, - { - "description": "Routing Key is not present", - "input": { - "message": { - "sentAt": "2022-10-11T13:10:54.877+05:30", - "userId": "user@45", - "context": {}, - "rudderId": "caae04c5-959f-467b-a293-86f6c62d59e6", - "messageId": "b6ce7f31-5d76-4240-94d2-3eea020ef791", - "timestamp": "2022-10-11T13:10:52.137+05:30", - "receivedAt": "2022-10-11T13:10:52.138+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-10-11T13:10:54.877+05:30" - }, - "destination": { - "Config": {} - } - }, - "output": { - "error": "Routing Key Is Required" - } - }, - { - "description": "Unsupported Event type", - "input": { - "message": { - "type": "alias", - "sentAt": "2022-10-11T13:10:54.877+05:30", - "userId": "user@45", - "context": {}, - "rudderId": "caae04c5-959f-467b-a293-86f6c62d59e6", - "messageId": "b6ce7f31-5d76-4240-94d2-3eea020ef791", - "timestamp": "2022-10-11T13:10:52.137+05:30", - "receivedAt": "2022-10-11T13:10:52.138+05:30", - "request_ip": "[::1]", - "originalTimestamp": "2022-10-11T13:10:54.877+05:30" - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac" - } - } - }, - "output": { - "error": "Event type alias is not supported" - } - }, - { - "description": "event name is not present", - "input": { - "message": { - "channel": "web", - "type": "track", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": {} - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac" - } - } - }, - "output": { - "error": "Event name is required" - } - }, - { - "description": "Parameter source is not present", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "Event name is required", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e" - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac" - } - } - }, - "output": { - "error": "Missing required value from \"properties.source\"" - } - }, - { - "description": "dedup_key is not present", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "Event name is required", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "action": "resolve" - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "error": "dedup_key required for resolve events" - } - }, - { - "description": "Timestamp older then 90 days", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "originalTimestamp": "2021-12-20T10:26:33.451Z", - "properties": { - "action": "trigger", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "error": "Events must be sent within ninety days of their occurrence" - } - }, - { - "description": "Trigger event", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "action": "trigger", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "links": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - } - ], - "images": [ - { - "alt": "first image", - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg" - }, - { - "alt": "second image", - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1" - } - ], - "payload": { - "class": "connection settings", - "group": "destination", - "source": "rudder-webapp", - "summary": "apiSecret is not present", - "severity": "critical", - "component": "ui", - "custom_details": { - "ping time": "1500ms", - "load avg": 0.75 - } - }, - "dedup_key": "9116b734-7e6b-4497-ab51-c16744d4487e", - "routing_key": "9552b56325dc490bd0139be85f7b8fac", - "event_action": "trigger" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/enqueue" - } - }, - { - "description": "Acknowledge event", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "action": "acknowledge", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "dedup_key": "9116b734-7e6b-4497-ab51-c16744d4487e", - "routing_key": "9552b56325dc490bd0139be85f7b8fac", - "event_action": "acknowledge" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/enqueue" - } - }, - { - "description": "Resolve event", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "action": "resolve", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "dedup_key": "9116b734-7e6b-4497-ab51-c16744d4487e", - "routing_key": "9552b56325dc490bd0139be85f7b8fac", - "event_action": "resolve" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/enqueue" - } - }, - { - "description": "Change event", - "input": { - "message": { - "channel": "web", - "type": "track", - "event": "Github CI/CD Triggered", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "source": "rudder-webapp", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - }, - "integrations": { - "pagerduty": { - "type": "changeEvent" - } - } - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "links": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - } - ], - "images": [ - { - "alt": "first image", - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg" - }, - { - "alt": "second image", - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1" - } - ], - "payload": { - "source": "rudder-webapp", - "summary": "Github CI/CD Triggered", - "custom_details": { - "load avg": 0.75, - "ping time": "1500ms" - } - }, - "routing_key": "9552b56325dc490bd0139be85f7b8fac" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/change/enqueue" - } - } -] diff --git a/test/__tests__/data/pagerduty_router.json b/test/__tests__/data/pagerduty_router.json deleted file mode 100644 index bec666beff..0000000000 --- a/test/__tests__/data/pagerduty_router.json +++ /dev/null @@ -1,286 +0,0 @@ -[ - { - "description": "Router Test Case", - "input": [ - { - "message": { - "channel": "web", - "type": "track", - "event": "Github CI/CD Triggered", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "source": "rudder-webapp", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - }, - "integrations": { - "pagerduty": { - "type": "changeEvent" - } - } - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "properties": { - "action": "acknowledge", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - }, - { - "message": { - "channel": "web", - "type": "track", - "event": "apiSecret is not present", - "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e", - "userId": "user@45", - "originalTimestamp": "2021-12-20T10:26:33.451Z", - "properties": { - "action": "trigger", - "dedupKey": "9116b734-7e6b-4497-ab51-c16744d4487e", - "severity": "critical", - "component": "ui", - "source": "rudder-webapp", - "group": "destination", - "class": "connection settings", - "customDetails": { - "ping time": "1500ms", - "load avg": 0.75 - }, - "imageURLs": [ - { - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg", - "alt": "first image" - }, - { - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1", - "alt": "second image" - }, - { - "alt": "third image" - } - ], - "linkURLs": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - }, - { - "text": "Destructure Error" - } - ] - } - }, - "metadata": { - "jobId": 3 - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - } - ], - "output": [ - { - "batched": false, - "batchedRequest": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "links": [ - { - "href": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error", - "text": "Js Object Error" - }, - { - "href": "https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack", - "text": "Stack Overflow Error" - } - ], - "images": [ - { - "alt": "first image", - "src": "https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg" - }, - { - "alt": "second image", - "src": "https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1" - } - ], - "payload": { - "source": "rudder-webapp", - "summary": "Github CI/CD Triggered", - "custom_details": { - "load avg": 0.75, - "ping time": "1500ms" - } - }, - "routing_key": "9552b56325dc490bd0139be85f7b8fac" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/change/enqueue" - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - }, - "metadata": [{ "jobId": 1 }], - "statusCode": 200 - }, - { - "batched": false, - "batchedRequest": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "dedup_key": "9116b734-7e6b-4497-ab51-c16744d4487e", - "routing_key": "9552b56325dc490bd0139be85f7b8fac", - "event_action": "acknowledge" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://events.pagerduty.com/v2/enqueue" - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - }, - "metadata": [{ "jobId": 2 }], - "statusCode": 200 - }, - { - "batched": false, - "error": "Events must be sent within ninety days of their occurrence", - "metadata": [{ "jobId": 3 }], - "statusCode": 400, - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation" - }, - "destination": { - "Config": { - "routingKey": "9552b56325dc490bd0139be85f7b8fac", - "dedupKeyFieldIdentifier": "properties.dedupKey" - } - } - } - ] - } -] diff --git a/test/__tests__/data/pardot_router_input.json b/test/__tests__/data/pardot_router_input.json deleted file mode 100644 index 5db25245a7..0000000000 --- a/test/__tests__/data/pardot_router_input.json +++ /dev/null @@ -1,596 +0,0 @@ -[ - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": { - "jobId": 1, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - }, - "message": { - "type": "identify", - "event": "navigated user", - "sentAt": "2021-09-08T11:10:45.466Z", - "userId": "user12345", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://127.0.0.1:5500/index.html", - "path": "/index.html", - "title": "Document", - "search": "", - "tab_url": "http://127.0.0.1:5500/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "width": 1536, - "height": 960, - "density": 2, - "innerWidth": 1536, - "innerHeight": 776 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36", - "externalId": [ - { - "type": "pardotId", - "id": 123435 - } - ] - }, - "rudderId": "fa2994a5-2a81-45fd-9919-fcf5596ad380", - "messageId": "e2d1a383-d9a2-4e03-a9dc-131d153c4d95", - "timestamp": "2021-11-15T14:06:42.497+05:30", - "properties": {}, - "receivedAt": "2021-11-15T14:06:42.497+05:30", - "request_ip": "[::1]", - "anonymousId": "d8b2ed61-7fa5-4ef8-bd92-6a506157c0cf", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-09-08T11:10:45.466Z", - "traits": { - "email": "Roger12@waltair.io", - "active_seats": 4, - "firstName": "Roger12", - "lastName": "Federer12", - "website": "https://rudderstack.com", - "score": 14 - } - } - }, - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": { - "jobId": 2, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - }, - "message": { - "type": "identify", - "event": "insert product", - "sentAt": "2021-09-08T11:10:45.466Z", - "userId": "user12345", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://127.0.0.1:5500/index.html", - "path": "/index.html", - "title": "Document", - "search": "", - "tab_url": "http://127.0.0.1:5500/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "width": 1536, - "height": 960, - "density": 2, - "innerWidth": 1536, - "innerHeight": 776 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" - }, - "rudderId": "fa2994a5-2a81-45fd-9919-fcf5596ad380", - "messageId": "e2d1a383-d9a2-4e03-a9dc-131d153c4d95", - "timestamp": "2021-11-15T14:06:42.497+05:30", - "properties": {}, - "receivedAt": "2021-11-15T14:06:42.497+05:30", - "request_ip": "[::1]", - "anonymousId": "d8b2ed61-7fa5-4ef8-bd92-6a506157c0cf", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-09-08T11:10:45.466Z", - "traits": { - "email": "Roger_12@waltair.io", - "active_seats": 4, - "firstName": "Roger_12", - "lastName": "Federer_12", - "website": "https://rudderstack.com", - "score": 14 - } - } - }, - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": { - "jobId": 3, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - }, - "message": { - "type": "identify", - "event": "insert product", - "sentAt": "2021-09-08T11:10:45.466Z", - "userId": "user12345", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://127.0.0.1:5500/index.html", - "path": "/index.html", - "title": "Document", - "search": "", - "tab_url": "http://127.0.0.1:5500/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "width": 1536, - "height": 960, - "density": 2, - "innerWidth": 1536, - "innerHeight": 776 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36", - "externalId": [ - { - "type": "crmfid", - "id": "00Q6r000002LKhTPVR" - } - ] - }, - "rudderId": "fa2994a5-2a81-45fd-9919-fcf5596ad380", - "messageId": "e2d1a383-d9a2-4e03-a9dc-131d153c4d95", - "timestamp": "2021-11-15T14:06:42.497+05:30", - "properties": {}, - "receivedAt": "2021-11-15T14:06:42.497+05:30", - "request_ip": "[::1]", - "anonymousId": "d8b2ed61-7fa5-4ef8-bd92-6a506157c0cf", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-09-08T11:10:45.466Z", - "traits": { - "email": "nick_kyrgios@waltair.io", - "active_seats": 4, - "firstName": "Nick", - "lastName": "Kyrgios", - "website": "https://rudderstack.com", - "score": 12 - } - } - }, - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": { - "jobId": 4, - "secret": { - "access_token": "myExpiredToken", - "refresh_token": "myRefreshToken" - } - }, - "message": { - "type": "identify", - "event": "navigated user", - "sentAt": "2021-09-08T11:10:45.466Z", - "userId": "user12345", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://127.0.0.1:5500/index.html", - "path": "/index.html", - "title": "Document", - "search": "", - "tab_url": "http://127.0.0.1:5500/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "width": 1536, - "height": 960, - "density": 2, - "innerWidth": 1536, - "innerHeight": 776 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" - }, - "rudderId": "fa2994a5-2a81-45fd-9919-fcf5596ad380", - "messageId": "e2d1a383-d9a2-4e03-a9dc-131d153c4d95", - "timestamp": "2021-11-15T14:06:42.497+05:30", - "properties": {}, - "receivedAt": "2021-11-15T14:06:42.497+05:30", - "request_ip": "[::1]", - "anonymousId": "d8b2ed61-7fa5-4ef8-bd92-6a506157c0cf", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-09-08T11:10:45.466Z", - "traits": { - "email": "rolex_waltair@mywebsite.io", - "active_seats": 4, - "firstName": "Rolex", - "lastName": "Waltair", - "website": "https://rudderstack.com", - "score": 15 - } - } - }, - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": { - "jobId": 5, - "secret": null - }, - "message": { - "type": "identify", - "event": "navigated user", - "sentAt": "2021-09-08T11:10:45.466Z", - "userId": "user12345", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "http://127.0.0.1:5500/index.html", - "path": "/index.html", - "title": "Document", - "search": "", - "tab_url": "http://127.0.0.1:5500/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "width": 1536, - "height": 960, - "density": 2, - "innerWidth": 1536, - "innerHeight": 776 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" - }, - "rudderId": "fa2994a5-2a81-45fd-9919-fcf5596ad380", - "messageId": "e2d1a383-d9a2-4e03-a9dc-131d153c4d95", - "timestamp": "2021-11-15T14:06:42.497+05:30", - "properties": {}, - "receivedAt": "2021-11-15T14:06:42.497+05:30", - "request_ip": "[::1]", - "anonymousId": "d8b2ed61-7fa5-4ef8-bd92-6a506157c0cf", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-09-08T11:10:45.466Z", - "traits": { - "email": "rolex_waltair@mywebsite.io", - "active_seats": 4, - "firstName": "Rolex", - "lastName": "Waltair", - "website": "https://rudderstack.com", - "score": 15 - } - } - } -] diff --git a/test/__tests__/data/pardot_router_output.json b/test/__tests__/data/pardot_router_output.json deleted file mode 100644 index 889cc8fd96..0000000000 --- a/test/__tests__/data/pardot_router_output.json +++ /dev/null @@ -1,385 +0,0 @@ -[ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://pi.pardot.com/api/prospect/version/4/do/upsert/id/123435", - "headers": { - "Authorization": "Bearer myToken", - "Pardot-Business-Unit-Id": "0Uv2v000000k9tHCAQ" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "first_name": "Roger12", - "last_name": "Federer12", - "website": "https://rudderstack.com", - "score": 14, - "campaign_id": 42213 - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://pi.pardot.com/api/prospect/version/4/do/upsert/email/Roger_12@waltair.io", - "headers": { - "Authorization": "Bearer myToken", - "Pardot-Business-Unit-Id": "0Uv2v000000k9tHCAQ" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "first_name": "Roger_12", - "last_name": "Federer_12", - "website": "https://rudderstack.com", - "score": 14, - "campaign_id": 42213 - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://pi.pardot.com/api/prospect/version/4/do/upsert/fid/00Q6r000002LKhTPVR", - "headers": { - "Authorization": "Bearer myToken", - "Pardot-Business-Unit-Id": "0Uv2v000000k9tHCAQ" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "first_name": "Nick", - "last_name": "Kyrgios", - "website": "https://rudderstack.com", - "score": 12, - "campaign_id": 42213 - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 3, - "secret": { - "access_token": "myToken", - "refresh_token": "myRefreshToken" - } - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://pi.pardot.com/api/prospect/version/4/do/upsert/email/rolex_waltair@mywebsite.io", - "headers": { - "Authorization": "Bearer myExpiredToken", - "Pardot-Business-Unit-Id": "0Uv2v000000k9tHCAQ" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "first_name": "Rolex", - "last_name": "Waltair", - "website": "https://rudderstack.com", - "score": 15, - "campaign_id": 42213 - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 4, - "secret": { - "access_token": "myExpiredToken", - "refresh_token": "myRefreshToken" - } - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - } - }, - { - "destination": { - "Config": { - "rudderAccountId": "1z8LpaSAuFR9TPWL6fECZfjmRa-", - "businessUnitId": "0Uv2v000000k9tHCAQ", - "campaignId": 42213, - "authStatus": "active", - "eventDelivery": true, - "eventDeliveryTS": 1636965406397 - }, - "DestinationDefinition": { - "name": "PARDOT", - "displayName": "Pardot", - "config": { - "auth": { - "type": "OAuth" - }, - "transformAt": "router", - "transformAtV1": "router", - "saveDestinationResponse": true, - "includeKeys": [], - "excludeKeys": [], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "warehouse", - "reactnative", - "flutter", - "cordova" - ], - "destConfig": { - "defaultConfig": ["rudderAccountId", "businessUnitId", "campaignId"] - }, - "secretKeys": ["businessUnitId"] - } - }, - "Enabled": true, - "ID": "1WXjIHpu7ETXgjfiGPW3kCUgZFR", - "Name": "test destination", - "Transformations": [] - }, - "metadata": [ - { - "jobId": 5, - "secret": null - } - ], - "batched": false, - "statusCode": 500, - "error": "OAuth - access token not found", - "statTags": { - "errorCategory": "platform", - "errorType": "oAuthSecret" - } - } -] diff --git a/test/__tests__/data/personalize_input.json b/test/__tests__/data/personalize_input.json deleted file mode 100644 index 6fd6e052f3..0000000000 --- a/test/__tests__/data/personalize_input.json +++ /dev/null @@ -1,2918 +0,0 @@ -[ - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "movieWatched": 2, - "eventValue": 7.06 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "MOVIE_WATCHED", - "to": "movieWatched" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "datasetARN": "", - "eventChoice": "PutEvents", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "itemId" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "itemId" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "USER_ID", - "to": "userId" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "USER_ID", - "to": "userId" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1", - "impressions": "abc" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "IMPRESSION", - "to": "impressions" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1", - "impressions": "abc", - "eventValue": "3.4abc" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "IMPRESSION", - "to": "impressions" - }, - { - "from": "EVENT_VALUE", - "to": "eventValue" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1", - "impressions": [2, 3], - "eventValue": "3.4abc" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "IMPRESSION", - "to": "impressions" - }, - { - "from": "EVENT_VALUE", - "to": "eventValue" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT DELETED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "itemId": "item 1", - "userId": "user 1", - "impressions": [2, 3], - "eventValue": "3.4abc" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "IMPRESSION", - "to": "impressions" - }, - { - "from": "EVENT_VALUE", - "to": "eventValue" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "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", - "userId": "123456", - "type": "identify", - "traits": { - "anonymousId": "anon_id", - "typeOfMovie": "art film", - "numberOfRatings": "13", - "lastName": "Doe", - "phone": "92374162212" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS", - "eventChoice": "PutUsers" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "", - "eventChoice": "PutUsers" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": 1 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutEvents" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": "" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": "" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutEvents" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "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", - "userId": "123456", - "type": "identify", - "traits": { - "anonymousId": "anon_id", - "typeOfMovie": "art film", - "numberOfRatings": "DDLJ", - "lastName": "Doe", - "phone": "92374162212" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS", - "eventChoice": "PutItems" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "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", - "userId": "123456", - "type": "identify", - "traits": { - "anonymousId": "anon_id", - "typeOfMovie": "art film", - "numberOfRatings": "DDLJ", - "lastName": "Doe", - "phone": "92374162212" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "", - "datasetARN": "", - "eventChoice": "PutUsers" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "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", - "userId": "123456", - "type": "identify", - "traits": { - "anonymousId": "anon_id", - "typeOfMovie": "art film", - "numberOfRatings": "DDLJ", - "lastName": "Doe", - "phone": "92374162212" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup", - "eventChoice": "PutUsers" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "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", - "userId": "123456", - "type": "identify", - "traits": { - "anonymousId": "anon_id", - "typeOfMovie": "art film", - "lastName": "Doe", - "phone": "92374162212" - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS", - "eventChoice": "PutUsers" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "typeOfMovie": "Art Film", - "eventValue": 7.06, - "itemId": "" - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "screen", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "TYPE_OF_MOVIE", - "to": "typeOfMovie" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - }, - { - "from": "ITEM_ID", - "to": "properties.itemId" - } - ], - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60", - "datasetARN": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "eventChoice": "PutEvents" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "movieWatched": 2, - "eventValue": 7.06 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "MOVIE_WATCHED", - "to": "movieWatched" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "stringifyProperty": true, - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "movieWatched": 2, - "eventValue": 7.06 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "MOVIE_WATCHED", - "to": "movieWatched" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "disableStringify": true, - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "anonymousId": "anon-id-new", - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2021-03-13T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "movieWatched": 2, - "eventValue": 7.06 - }, - "receivedAt": "2021-03-13T01:56:44.340+05:30", - "request_ip": "[::1]", - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "sentAt": "2021-03-13T01:56:46.896+05:30", - "timestamp": "2020-02-02T00:23:09.544Z", - "type": "track", - "userId": "identified user id" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968", - "receivedAt": "2021-03-13T01:56:44.340+05:30" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "MOVIE_WATCHED", - "to": "movieWatched" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "disableStringify": false, - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - }, - { - "message": { - "context": { - "ip": "14.5.67.21", - "library": { - "name": "http" - }, - "sessionId": "4bb69e26-b5a6-446a-a140-dbb6263369c9" - }, - "event": "PRODUCT ADDED", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "originalTimestamp": "2023-01-10T01:56:46.896+05:30", - "properties": { - "numberOfRatings": "checking with webapp change", - "movieWatched": 2, - "eventValue": 7.06 - }, - "type": "track" - }, - "metadata": { - "sourceId": "1pe7ty3hMMQCnrfZ0Mn2QG48884", - "destinationId": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "jobId": 1, - "destinationType": "PERSONALIZE", - "messageId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "messageIds": null, - "rudderId": "daf823fb-e8d3-413a-8313-d34cd756f968" - }, - "destination": { - "ID": "1pe9WgFOuFHOSIfmUkkhVTD1Rsd", - "Name": "personalize Dev Testing", - "DestinationDefinition": { - "ID": "1pdthjPnz8gQhSTE2QTbm2LUMGM", - "Name": "PERSONALIZE", - "DisplayName": "AWS Personalize", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKeyId", - "secretAccessKey", - "region", - "trackingId", - "eventName", - "customMappings" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKeyId", "secretAccessKey"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "processor" - } - }, - "Config": { - "accessKeyId": "ABC", - "customMappings": [ - { - "from": "MOVIE_WATCHED", - "to": "movieWatched" - }, - { - "from": "NUMBER_OF_RATINGS", - "to": "numberOfRatings" - } - ], - "datasetARN": "", - "eventChoice": "PutEvents", - "disableStringify": false, - "region": "us-east-1", - "secretAccessKey": "DEF", - "trackingId": "c60" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "libraries": [], - "request": { - "query": {} - } - } -] diff --git a/test/__tests__/data/personalize_output.json b/test/__tests__/data/personalize_output.json deleted file mode 100644 index 8f4802fe8d..0000000000 --- a/test/__tests__/data/personalize_output.json +++ /dev/null @@ -1,334 +0,0 @@ -[ - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT ADDED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "movieWatched": "2", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "item 1", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "user 1", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "userId": "identified user id", - "sessionId": "anon-id-new", - "trackingId": "c60", - "eventList": [ - { - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - }, - "impression": ["abc"], - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9" - } - ] - }, - { - "userId": "identified user id", - "sessionId": "anon-id-new", - "trackingId": "c60", - "eventList": [ - { - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - }, - "impression": ["abc"], - "eventValue": 3.4, - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9" - } - ] - }, - { - "userId": "identified user id", - "sessionId": "anon-id-new", - "trackingId": "c60", - "eventList": [ - { - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - }, - "impression": ["2", "3"], - "eventValue": 3.4, - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9" - } - ] - }, - { - "userId": "identified user id", - "sessionId": "identified user id", - "trackingId": "c60", - "eventList": [ - { - "eventType": "PRODUCT DELETED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - }, - "impression": ["2", "3"], - "eventValue": 3.4, - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9" - } - ] - }, - { - "payload": { - "datasetArn": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS", - "users": [ - { - "userId": "123456", - "properties": { - "typeOfMovie": "art film", - "numberOfRatings": "13" - } - } - ] - }, - "choice": "PutUsers" - }, - { - "payload": { - "datasetArn": "arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/ITEMS", - "items": [ - { - "properties": { - "typeOfMovie": "Art Film", - "numberOfRatings": "checking with webapp change" - }, - "itemId": "1" - } - ] - }, - "choice": "PutItems" - }, - { - "error": "Event type is required" - }, - { - "error": "Mapped property typeOfMovie not found" - }, - { - "error": "Either Dataset ARN is not correctly entered or invalid" - }, - { - "error": "Dataset ARN is a mandatory information to use putItems" - }, - { - "error": "PutUsers is not supported for Track Calls" - }, - { - "error": "Tracking Id is a mandatory information to use putEvents" - }, - { - "error": "itemId is a mandatory property for using PutItems" - }, - { - "error": "Cannot process if no event name specified" - }, - { - "error": "This Message Type does not support PutItems. Aborting message" - }, - { - "error": "Dataset ARN is a mandatory information to use putUsers" - }, - { - "error": "Either Dataset ARN is not correctly entered or invalid" - }, - { - "error": "Mapped property numberOfRatings not found" - }, - { - "error": "Event type screen is not supported" - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT ADDED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "movieWatched": "2", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT ADDED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "movieWatched": 2, - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "anon-id-new", - "trackingId": "c60", - "userId": "identified user id", - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT ADDED", - "sentAt": "2020-02-02T00:23:09.544Z", - "properties": { - "movieWatched": "2", - "numberOfRatings": "checking with webapp change" - } - } - ] - }, - { - "sessionId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "trackingId": "c60", - "userId": null, - "eventList": [ - { - "itemId": "4bb69e26-b5a6-446a-a140-dbb6263369c9", - "eventType": "PRODUCT ADDED", - "sentAt": "2023-01-10T01:56:46.896+05:30", - "properties": { - "movieWatched": "2", - "numberOfRatings": "checking with webapp change" - } - } - ] - } -] diff --git a/test/__tests__/data/pinterest_tag_router_batch_output.json b/test/__tests__/data/pinterest_tag_router_batch_output.json index 6fceb08278..995d68428a 100644 --- a/test/__tests__/data/pinterest_tag_router_batch_output.json +++ b/test/__tests__/data/pinterest_tag_router_batch_output.json @@ -142,10 +142,12 @@ }, "metadata": [ { - "jobId": 1 + "jobId": 1, + "userId": "u1" }, { - "jobId": 2 + "jobId": 2, + "userId": "u1" } ], "batched": true, @@ -329,13 +331,16 @@ }, "metadata": [ { - "jobId": 3 + "jobId": 3, + "userId": "u1" }, { - "jobId": 4 + "jobId": 4, + "userId": "u1" }, { - "jobId": 6 + "jobId": 6, + "userId": "u1" } ], "batched": true, @@ -445,7 +450,8 @@ }, "metadata": [ { - "jobId": 7 + "jobId": 7, + "userId": "u1" } ], "batched": true, @@ -496,7 +502,8 @@ { "metadata": [ { - "jobId": 5 + "jobId": 5, + "userId": "u1" } ], "batched": false, @@ -736,10 +743,12 @@ }, "metadata": [ { - "jobId": 8 + "jobId": 8, + "userId": "u1" }, { - "jobId": 9 + "jobId": 9, + "userId": "u1" } ], "statusCode": 200 @@ -852,7 +861,8 @@ }, "metadata": [ { - "jobId": 10 + "jobId": 10, + "userId": "u1" } ], "statusCode": 200 diff --git a/test/__tests__/data/pinterest_tag_router_error_input.json b/test/__tests__/data/pinterest_tag_router_error_input.json index e241ffb864..ce188c7335 100644 --- a/test/__tests__/data/pinterest_tag_router_error_input.json +++ b/test/__tests__/data/pinterest_tag_router_error_input.json @@ -75,7 +75,8 @@ } }, "metadata": { - "jobId": 5 + "jobId": 5, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", diff --git a/test/__tests__/data/pinterest_tag_router_error_output.json b/test/__tests__/data/pinterest_tag_router_error_output.json index c4f0f4768d..4cd4e6966c 100644 --- a/test/__tests__/data/pinterest_tag_router_error_output.json +++ b/test/__tests__/data/pinterest_tag_router_error_output.json @@ -2,7 +2,8 @@ { "metadata": [ { - "jobId": 5 + "jobId": 5, + "userId": "u1" } ], "batched": false, diff --git a/test/__tests__/data/pinterest_tag_router_input.json b/test/__tests__/data/pinterest_tag_router_input.json index 4b966f948f..26febec456 100644 --- a/test/__tests__/data/pinterest_tag_router_input.json +++ b/test/__tests__/data/pinterest_tag_router_input.json @@ -77,7 +77,8 @@ } }, "metadata": { - "jobId": 1 + "jobId": 1, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -198,7 +199,8 @@ } }, "metadata": { - "jobId": 2 + "jobId": 2, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -300,7 +302,8 @@ } }, "metadata": { - "jobId": 3 + "jobId": 3, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -421,7 +424,8 @@ } }, "metadata": { - "jobId": 4 + "jobId": 4, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -542,7 +546,8 @@ } }, "metadata": { - "jobId": 5 + "jobId": 5, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -663,7 +668,8 @@ } }, "metadata": { - "jobId": 6 + "jobId": 6, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -764,7 +770,8 @@ "files": {} }, "metadata": { - "jobId": 7 + "jobId": 7, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -888,7 +895,8 @@ } }, "metadata": { - "jobId": 8 + "jobId": 8, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -1011,7 +1019,8 @@ } }, "metadata": { - "jobId": 9 + "jobId": 9, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", @@ -1134,7 +1143,8 @@ } }, "metadata": { - "jobId": 10 + "jobId": 10, + "userId": "u1" }, "destination": { "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", diff --git a/test/__tests__/data/pinterest_tag_router_output.json b/test/__tests__/data/pinterest_tag_router_output.json index 0e128575ee..2bfc7c3cf5 100644 --- a/test/__tests__/data/pinterest_tag_router_output.json +++ b/test/__tests__/data/pinterest_tag_router_output.json @@ -294,22 +294,28 @@ }, "metadata": [ { - "jobId": 1 + "jobId": 1, + "userId": "u1" }, { - "jobId": 2 + "jobId": 2, + "userId": "u1" }, { - "jobId": 3 + "jobId": 3, + "userId": "u1" }, { - "jobId": 4 + "jobId": 4, + "userId": "u1" }, { - "jobId": 6 + "jobId": 6, + "userId": "u1" }, { - "jobId": 7 + "jobId": 7, + "userId": "u1" } ], "batched": true, @@ -360,7 +366,8 @@ { "metadata": [ { - "jobId": 5 + "jobId": 5, + "userId": "u1" } ], "statTags": { @@ -593,13 +600,16 @@ }, "metadata": [ { - "jobId": 8 + "jobId": 8, + "userId": "u1" }, { - "jobId": 9 + "jobId": 9, + "userId": "u1" }, { - "jobId": 10 + "jobId": 10, + "userId": "u1" } ], "batched": true, diff --git a/test/__tests__/data/rockerbox.json b/test/__tests__/data/rockerbox.json deleted file mode 100644 index 6e90e20241..0000000000 --- a/test/__tests__/data/rockerbox.json +++ /dev/null @@ -1,598 +0,0 @@ -[ - { - "description": "Error flow - Message type not supported", - "input": { - "destination": { - "Config": { - "advertiserId": "KDH4JNDHCFJHJ57SJOWJE490W01JFNHGDSSFHDKDSDF" - } - }, - "message": { - "context": { - "traits": { - "homwTown": "kanpur", - "age": "24" - } - }, - "type": "Identify", - "userId": "yash001", - "originalTimestamp": "2019-10-14T09:03:17.562Z" - } - }, - "output": { - "statusCode": 400, - "error": "Message type identify is not supported", - "statTags": { - "destination": "rockerbox", - "stage": "transform", - "scope": "exception" - } - } - }, - { - "description": "Error flow - Unassociated Event Type", - "input": { - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added To Cart", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "message": { - "type": "track", - "event": "Product Added", - "sentAt": "2022-08-07T20:02:19.352Z", - "userId": "userSampleX138", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "locale": "en-IN", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 584, - "innerHeight": 789 - }, - "traits": { - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "last_name": "Stack", - "first_name": "Rudder", - "subscription": "youtube" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - }, - "rudderId": "4a47e99b-2afc-45c6-b902-ed69282ca805", - "messageId": "1659902539347900-c622426c-a1dd-44c0-ac6d-d4dbee3f4a93", - "properties": { - "checkout_id": "12345", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "product_name": "Red T-shirt" - }, - "anonymousId": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "integrations": { - "All": true - }, - "originalTimestamp": "2022-08-07T20:02:19.347Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - }, - "output": { - "statusCode": 400, - "error": "The event is not associated to a RockerBox event. Aborting!", - "statTags": { - "destination": "rockerbox", - "stage": "transform", - "scope": "exception" - } - } - }, - { - "description": "Track Call with a userId", - "input": { - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "message": { - "type": "track", - "event": "Product Added", - "sentAt": "2022-08-07T20:02:19.352Z", - "userId": "userSampleX138", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "locale": "en-IN", - "traits": { - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "last_name": "Stack", - "first_name": "Rudder" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - }, - "rudderId": "4a47e99b-2afc-45c6-b902-ed69282ca805", - "messageId": "1659902539347900-c622426c-a1dd-44c0-ac6d-d4dbee3f4a93", - "properties": { - "checkout_id": "12345", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "product_name": "Red T-shirt" - }, - "anonymousId": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "integrations": { - "All": true - }, - "originalTimestamp": "2022-08-07T20:02:19.347Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - }, - "output": { - "body": { - "FORM": {}, - "JSON": { - "action": "conv.add_to_cart", - "checkout_id": "12345", - "email": "userSampleX120@gmail.com", - "conversion_source": "RudderStack", - "customer_id": "userSampleX138", - "anonymous_id": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "phone": "9878764736", - "product_name": "Red T-shirt", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "timestamp": 1659902539 - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "https://webhooks.getrockerbox.com/rudderstack", - "files": {}, - "headers": {}, - "method": "POST", - "params": { - "advertiser": "test id" - }, - "type": "REST", - "version": "1" - } - }, - { - "description": "Track Call with all properties", - "input": { - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "message": { - "type": "track", - "event": "Product Added", - "sentAt": "2022-08-07T20:02:19.352Z", - "userId": "userSampleX138", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "locale": "en-IN", - "traits": { - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "last_name": "Stack", - "first_name": "Rudder" - }, - "externalId": [ - { - "type": "rockerboxExternalId", - "id": "rbUid" - } - ], - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - }, - "rudderId": "4a47e99b-2afc-45c6-b902-ed69282ca805", - "messageId": "1659902539347900-c622426c-a1dd-44c0-ac6d-d4dbee3f4a93", - "properties": { - "checkout_id": "12345", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "product_name": "Red T-shirt", - "externalId": "rbUid", - "countryCode": "IN", - "listingId": "10101" - }, - "anonymousId": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "integrations": { - "All": true - }, - "originalTimestamp": "2022-08-07T20:02:19.347Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://webhooks.getrockerbox.com/rudderstack", - "headers": {}, - "params": { - "advertiser": "test id" - }, - "body": { - "JSON": { - "customer_id": "userSampleX138", - "anonymous_id": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "email": "userSampleX120@gmail.com", - "externalId": "rbUid", - "phone": "9878764736", - "product_name": "Red T-shirt", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "timestamp": 1659902539, - "country_code": "IN", - "listing_id": "10101", - "conversion_source": "RudderStack", - "action": "conv.add_to_cart", - "checkout_id": "12345" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } - }, - { - "description": "Track call with all properties along-with custom properties", - "input": { - "destination": { - "Config": { - "advertiserId": "hdowhfiqhfwaiwhrdafshbfacicolsa", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added", - "to": "conv.add_to_cart" - } - ], - "customPropsMapping": [ - { - "from": "unit_id", - "to": "unitID" - }, - { - "from": "merch_id", - "to": "merch_id" - }, - { - "from": "bounce_id", - "to": "bounceID" - } - ], - "useNativeSDK": { - "web": false - }, - "useNativeSDKToSend": { - "web": false - }, - "clientAuthId": { - "web": "" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "" - } - ] - }, - "customDomain": { - "web": "" - }, - "enableCookieSync": { - "web": false - } - } - }, - "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": "track", - "traits": { - "userId": "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": "" - } - }, - "properties": { - "unit_id": 123, - "merch_id": false, - "bounceiD": "fakefake", - "counce_id": "" - }, - "event": "Product Added", - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "email": "jamesDoe@gmail.com", - "phone": "92374162212", - "action": "conv.add_to_cart", - "anonymous_id": "anon_id", - "bounceiD": "fakefake", - "merch_id": false, - "timestamp": 1571043797, - "unit_id": 123, - "customer_id": "anon_id", - "conversion_source": "RudderStack", - "counce_id": "" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": { - "advertiser": "hdowhfiqhfwaiwhrdafshbfacicolsa" - }, - "headers": {}, - "version": "1", - "endpoint": "https://webhooks.getrockerbox.com/rudderstack" - } - }, - { - "description": "userId/anonymousId check", - "input": { - "destination": { - "Config": { - "advertiserId": "KDH4JNDHCFJHJ57SJOWJE490W01JFNHGDSSFHDKDSDF" - } - }, - "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", - "type": "track", - "traits": { - "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": "" - } - }, - "properties": { - "unit_id": 123, - "merch_id": false, - "bounceiD": "fakefake", - "counce_id": "" - }, - "event": "Product Added", - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "statusCode": 400, - "error": "Anyone of userId or anonymousId is required to make the call", - "statTags": { - "destination": "rockerbox", - "stage": "transform", - "scope": "exception" - } - } - } -] diff --git a/test/__tests__/data/rockerbox_router_input.json b/test/__tests__/data/rockerbox_router_input.json deleted file mode 100644 index 7b03502663..0000000000 --- a/test/__tests__/data/rockerbox_router_input.json +++ /dev/null @@ -1,168 +0,0 @@ -[ - { - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "type": "track", - "event": "Product Added", - "sentAt": "2022-08-07T20:02:19.352Z", - "userId": "userSampleX138", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "locale": "en-IN", - "traits": { - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "last_name": "Stack", - "first_name": "Rudder" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - }, - "rudderId": "4a47e99b-2afc-45c6-b902-ed69282ca805", - "messageId": "1659902539347900-c622426c-a1dd-44c0-ac6d-d4dbee3f4a93", - "properties": { - "checkout_id": "12345", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "product_name": "Red T-shirt" - }, - "anonymousId": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "integrations": { - "All": true - }, - "originalTimestamp": "2022-08-07T20:02:19.347Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - }, - { - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Viewed", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "metadata": { - "jobId": 2 - }, - "message": { - "type": "track", - "event": "Product Viewed", - "sentAt": "2022-08-07T20:02:19.352Z", - "userId": "userSampleX138", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "locale": "en-IN", - "traits": { - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "last_name": "Stack", - "first_name": "Rudder" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" - }, - "rudderId": "4a47e99b-2afc-45c6-b902-ed69282ca805", - "messageId": "1659902539347900-c622426c-a1dd-44c0-ac6d-d4dbee3f4a93", - "properties": { - "checkout_id": "12345", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "product_name": "Red T-shirt" - }, - "anonymousId": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "integrations": { - "All": true - }, - "originalTimestamp": "2022-08-07T20:02:19.347Z" - }, - "writeKey": "2D0yaayoBD7bp8uFomnBONdedcA", - "requestIP": "[::1]", - "receivedAt": "2022-08-08T01:32:19.369+05:30" - } -] diff --git a/test/__tests__/data/rockerbox_router_output.json b/test/__tests__/data/rockerbox_router_output.json deleted file mode 100644 index 5394fcd220..0000000000 --- a/test/__tests__/data/rockerbox_router_output.json +++ /dev/null @@ -1,158 +0,0 @@ -[ - { - "batched": false, - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://webhooks.getrockerbox.com/rudderstack", - "headers": {}, - "params": { - "advertiser": "test id" - }, - "body": { - "JSON": { - "action": "conv.add_to_cart", - "checkout_id": "12345", - "anonymous_id": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "conversion_source": "RudderStack", - "customer_id": "userSampleX138", - "email": "userSampleX120@gmail.com", - "phone": "9878764736", - "product_name": "Red T-shirt", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "timestamp": 1659902539 - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Added", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "metadata": [ - { - "jobId": 1 - } - ], - "statusCode": 200 - }, - { - "batched": false, - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://webhooks.getrockerbox.com/rudderstack", - "headers": {}, - "params": { - "advertiser": "test id" - }, - "body": { - "JSON": { - "action": "conv.add_to_cart", - "checkout_id": "12345", - "conversion_source": "RudderStack", - "customer_id": "userSampleX138", - "email": "userSampleX120@gmail.com", - "anonymous_id": "5f093403-1457-4a2c-b4e4-c61ec3bacf56", - "phone": "9878764736", - "product_name": "Red T-shirt", - "product_url": "http://www.yourdomain.com/products/red-t-shirt", - "timestamp": 1659902539 - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "destination": { - "Config": { - "advertiserId": "test id", - "eventFilteringOption": "disable", - "whitelistedEvents": [ - { - "eventName": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "" - } - ], - "eventsMap": [ - { - "from": "Product Viewed", - "to": "conv.add_to_cart" - } - ], - "useNativeSDK": { - "web": false - }, - "clientAuthId": { - "web": "test-client-auth-id" - }, - "oneTrustCookieCategories": { - "web": [ - { - "oneTrustCookieCategory": "Marketing Sample" - } - ] - }, - "customDomain": { - "web": "https://cookiedomain.com" - }, - "enableCookieSync": { - "web": true - } - } - }, - "metadata": [ - { - "jobId": 2 - } - ], - "statusCode": 200 - } -] diff --git a/test/__tests__/data/sendgrid.json b/test/__tests__/data/sendgrid.json deleted file mode 100644 index 1981e16cf1..0000000000 --- a/test/__tests__/data/sendgrid.json +++ /dev/null @@ -1,1301 +0,0 @@ -[ - { - "description": "Identify call without an email", - "input": { - "destination": { - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [ - { - "event": "open" - } - ], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [ - { - "groupId": "" - } - ], - "html": "", - "listId": "list111", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "type": "identify", - "userId": "user@1", - "context": { - "traits": { - "age": "25", - "city": "Surat", - "phone": "+91 9876543210", - "lastName": "test", - "firstName": "rudder", - "state": "Gujarat" - } - } - } - }, - "output": { - "error": "Parameter mail is required" - } - }, - { - "description": "Identify call with list_id configured from web-app", - "input": { - "destination": { - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [ - { - "event": "open" - } - ], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [ - { - "groupId": "" - } - ], - "html": "", - "listId": "list111", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "type": "identify", - "userId": "user@1", - "context": { - "traits": { - "age": "25", - "city": "Surat", - "email": "test@rudderstack.com", - "phone": "+91 9876543210", - "lastName": "test", - "firstName": "rudder", - "state": "Gujarat" - } - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "contactDetails": { - "email": "test@rudderstack.com", - "last_name": "test", - "first_name": "rudder", - "phone_number": "+91 9876543210", - "custom_fields": {} - }, - "contactListIds": "list111" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "version": "1", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts" - } - }, - { - "description": "Identify call with no list-id given", - "input": { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [ - { - "from": "name", - "to": "user_name" - } - ], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [ - { - "event": "open" - } - ], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [ - { - "groupId": "" - } - ], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "type": "identify", - "userId": "user@1", - "context": { - "traits": { - "age": "25", - "city": "Surat", - "name": "rudder test", - "email": "test@rudderstack.com", - "phone": "+91 9876543210", - "lastName": "test", - "firstName": "rudder", - "state": "Gujarat" - } - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "contactDetails": { - "email": "test@rudderstack.com", - "last_name": "test", - "first_name": "rudder", - "unique_name": "rudder test", - "phone_number": "+91 9876543210", - "custom_fields": { - "w1_T": "rudder test" - } - }, - "contactListIds": "" - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "version": "1", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts" - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "text": null, - "utmContent": null - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "ankit@rudderstack.com" - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ] - } - }, - "files": {} - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "testing@gmail.com" - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ] - } - }, - "files": {} - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "group": "12345", - "groupsToDisplay": [ - { - "groupId": "12345" - }, - { - "groupId": "abc" - }, - { - "groupId": "12346" - } - ] - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "testing@gmail.com" - }, - "asm": { - "group_id": 12345, - "groups_to_display": [12345, 12346] - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ] - } - }, - "files": {} - } - }, - { - "description": "Track call without an event name", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "group": "12345", - "groupsToDisplay": [ - { - "groupId": "12345" - }, - { - "groupId": "abc" - }, - { - "groupId": "12346" - } - ] - } - }, - "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", - "type": "track", - "event": "new event", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "error": "Event not configured on dashboard" - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "group": "12345", - "groupsToDisplay": [ - { - "groupId": "12345" - }, - { - "groupId": "abc" - }, - { - "groupId": "12346" - } - ], - "attachments": [ - { - "content": "YXNkZ2FmZ3FlcmRxZ2Iua2puYWRrbGpuYWtqc2Rmbg==", - "filename": "index.html" - } - ] - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "testing@gmail.com" - }, - "asm": { - "group_id": 12345, - "groups_to_display": [12345, 12346] - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "attachments": [ - { - "content": "YXNkZ2FmZ3FlcmRxZ2Iua2puYWRrbGpuYWtqc2Rmbg==", - "filename": "index.html" - } - ] - } - }, - "files": {} - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "group": "12345", - "groupsToDisplay": [ - { - "groupId": "12345" - }, - { - "groupId": "abc" - }, - { - "groupId": "12346" - } - ], - "attachments": [ - { - "content": "YXNkZ21hcyxkLm1mO29xd2llbGpmbWwuYWRrbXMuLGFtZHM=", - "filename": "index.html" - }, - { - "content": "bGFqa3NtZGZrZ2hxaWVybmtsYSBmZGtvamx3bWVGTC5NQW5kcy5rbmtmYWtkZg==" - } - ] - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "testing@gmail.com" - }, - "asm": { - "group_id": 12345, - "groups_to_display": [12345, 12346] - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "attachments": [ - { - "content": "YXNkZ21hcyxkLm1mO29xd2llbGpmbWwuYWRrbXMuLGFtZHM=", - "filename": "index.html" - } - ] - } - }, - "files": {} - } - }, - { - "description": "Track Call", - "input": { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [ - { - "event": "testing" - }, - { - "event": "clicked" - } - ], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "footerText": "some text", - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false, - "group": "12345", - "groupsToDisplay": [ - { - "groupId": "12345" - }, - { - "groupId": "abc" - }, - { - "groupId": "12346" - } - ], - "attachments": [ - { - "content": "YXNkZ21hcyxkLm1mO29xd2llbGpmbWwuYWRrbXMuLGFtZHM=", - "filename": "index.html" - }, - { - "content": "bGFqa3NtZGZrZ2hxaWVybmtsYSBmZGtvamx3bWVGTC5NQW5kcy5rbmtmYWtkZg==" - } - ] - } - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "replyTo": { - "email": "testing@gmail.com" - }, - "mailSettings": { - "bypassListManagement": true, - "footer": true - }, - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.sendgrid.com/v3/mail/send", - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { - "email": "testing@gmail.com" - }, - "asm": { - "group_id": 12345, - "groups_to_display": [12345, 12346] - }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "attachments": [ - { - "content": "YXNkZ21hcyxkLm1mO29xd2llbGpmbWwuYWRrbXMuLGFtZHM=", - "filename": "index.html" - } - ], - "mail_settings": { - "bypass_list_management": { - "enable": true - }, - "footer": { - "enable": true, - "text": "some text" - } - } - } - }, - "files": {} - } - } -] diff --git a/test/__tests__/data/sendgrid_batch.json b/test/__tests__/data/sendgrid_batch.json deleted file mode 100644 index 23c9c34f9c..0000000000 --- a/test/__tests__/data/sendgrid_batch.json +++ /dev/null @@ -1,941 +0,0 @@ -[ - { - "description": "Identify call batching with multiple listIds", - "input": [ - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@3", - "type": "identify", - "context": { - "traits": { - "age": "30", - "email": "user3@rudderlabs.com", - "phone": "+91 9876543210", - "city": "Ahmedabad", - "state": "Gujarat", - "lastName": "gupta", - "firstName": "aman", - "name": "aman gupta" - }, - "externalId": [ - { - "type": "listIds", - "id": ["476b736e-24a4-4089-8392-66a6bf6aa14d"] - } - ] - } - }, - "metadata": { - "jobId": 1 - } - }, - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@4", - "type": "identify", - "context": { - "traits": { - "email": "user4@rudderlabs.com", - "phone": "+91 9876543210", - "userId": "sajal", - "city": "Bombey", - "state": "Maharastra", - "lastName": "gupta", - "username": "suresh gupta", - "firstName": "suresh" - }, - "externalId": [ - { - "type": "listIds", - "id": "737ae8d4-25b4-496e-adff-2fded15fd0c6" - } - ] - } - }, - "metadata": { - "jobId": 2 - } - }, - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@5", - "type": "identify", - "context": { - "traits": { - "email": "user5@rudderlabs.com", - "phone": "+91 9876543210", - "city": "Banglore", - "lastName": "bhatt", - "username": "kiran bhatt", - "firstName": "kiran" - }, - "externalId": [ - { - "type": "listIds", - "id": [ - "737ae8d4-25b4-496e-adff-2fded15fd0c6", - "a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1" - ] - } - ] - } - }, - "metadata": { - "jobId": 3 - } - }, - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@6", - "type": "identify", - "context": { - "traits": { - "email": "user6@rudderlabs.com", - "phone": "+91 9876543210", - "city": "Los Angeles", - "lastName": "doe", - "name": "john doe", - "state": "California", - "firstName": "john" - }, - "externalId": [ - { - "type": "listIds", - "id": [ - "bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e", - "cb7f13a1-b77b-4fb3-8440-56f6524716d3" - ] - } - ] - } - }, - "metadata": { - "jobId": 4 - } - }, - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@7", - "type": "identify", - "context": { - "traits": { - "email": "user7@rudderlabs.com", - "phone": "+91 9876543210", - "city": "Chicago", - "lastName": "patel", - "name": "reshma patel", - "state": "Illinois", - "firstName": "reshma" - } - } - }, - "metadata": { - "jobId": 5 - } - }, - { - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - }, - "message": { - "userId": "user@8", - "type": "identify", - "context": { - "traits": { - "email": "user8@rudderlabs.com", - "phone": "+91 9876543210", - "city": "Chicago", - "lastName": "patel", - "name": "karishma patel", - "state": "Illinois", - "firstName": "karishma" - }, - "externalId": [ - { - "type": "listIds", - "id": [ - "737ae8d4-25b4-496e-adff-2fded15fd0c6", - "a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1", - "bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e", - "cb7f13a1-b77b-4fb3-8440-56f6524716d3" - ] - } - ] - } - }, - "metadata": { - "jobId": 6 - } - } - ], - "output": [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "list_ids": ["476b736e-24a4-4089-8392-66a6bf6aa14d"], - "contacts": [ - { - "email": "user3@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "aman", - "last_name": "gupta", - "unique_name": "aman gupta", - "custom_fields": { "w1_T": "aman gupta" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 1 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "list_ids": ["737ae8d4-25b4-496e-adff-2fded15fd0c6"], - "contacts": [ - { - "email": "user4@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "suresh", - "last_name": "gupta", - "custom_fields": {} - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 2 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "list_ids": [ - "737ae8d4-25b4-496e-adff-2fded15fd0c6", - "a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1" - ], - "contacts": [ - { - "email": "user5@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "kiran", - "last_name": "bhatt", - "custom_fields": {} - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 3 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "list_ids": [ - "bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e", - "cb7f13a1-b77b-4fb3-8440-56f6524716d3" - ], - "contacts": [ - { - "email": "user6@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "john", - "last_name": "doe", - "unique_name": "john doe", - "custom_fields": { "w1_T": "john doe" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 4 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "contacts": [ - { - "email": "user7@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "reshma", - "last_name": "patel", - "unique_name": "reshma patel", - "custom_fields": { "w1_T": "reshma patel" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 5 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.sendgrid.com/v3/marketing/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apikey" - }, - "params": {}, - "body": { - "JSON": { - "list_ids": [ - "737ae8d4-25b4-496e-adff-2fded15fd0c6", - "a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1", - "bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e", - "cb7f13a1-b77b-4fb3-8440-56f6524716d3" - ], - "contacts": [ - { - "email": "user8@rudderlabs.com", - "phone_number": "+91 9876543210", - "first_name": "karishma", - "last_name": "patel", - "unique_name": "karishma patel", - "custom_fields": { "w1_T": "karishma patel" } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{ "jobId": 6 }], - "batched": true, - "statusCode": 200, - "destination": { - "ID": "2HOQOO6wWKaKjeQrEABXgiH6cmU", - "Config": { - "IPPoolName": "", - "apiKey": "apikey", - "attachments": [ - { - "content": "", - "contentId": "", - "disposition": "", - "filename": "", - "type": "" - } - ], - "clickTracking": true, - "clickTrackingEnableText": true, - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "customFieldsMapping": [{ "from": "name", "to": "user_name" }], - "eventDelivery": false, - "eventDeliveryTS": 1668424218224, - "eventNamesSettings": [{ "event": "open" }], - "footer": false, - "fromEmail": "a@g.com", - "fromName": "", - "ganalytics": false, - "group": "", - "groupsToDisplay": [{ "groupId": "" }], - "html": "", - "mailFromTraits": false, - "openTracking": false, - "openTrackingSubstitutionTag": "", - "replyToEmail": "", - "replyToName": "", - "sandboxMode": false, - "subject": "hello there from webflow", - "subscriptionTracking": false, - "substitutionTag": "", - "templateId": "", - "text": "" - } - } - } - ] - } -] diff --git a/test/__tests__/data/sendgrid_router.json b/test/__tests__/data/sendgrid_router.json deleted file mode 100644 index a9147d1ee7..0000000000 --- a/test/__tests__/data/sendgrid_router.json +++ /dev/null @@ -1,152 +0,0 @@ -[ - { - "description": "Router Test Case", - "input": [ - { - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [{ "event": "testing" }, { "event": "clicked" }], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false - } - }, - "metadata": { - "jobId": 2 - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - }, - { - "name": "hello" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - } - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - } - ], - "output": [ - { - "batchedRequest": { - "body": { - "XML": {}, - "FORM": {}, - "JSON_ARRAY": {}, - "JSON": { - "personalizations": [ - { - "to": [ - { - "email": "a@g.com" - } - ], - "subject": "hey there" - } - ], - "from": { - "email": "ankit@rudderstack.com" - }, - "reply_to": { "email": "ankit@rudderstack.com" }, - "subject": "A sample subject", - "content": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ] - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Authorization": "Bearer apikey", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.sendgrid.com/v3/mail/send" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "apikey", - "eventNamesSettings": [{ "event": "testing" }, { "event": "clicked" }], - "subject": "A sample subject", - "replyToEmail": "ankit@rudderstack.com", - "contents": [ - { - "type": "text/html", - "value": "

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

" - } - ], - "footer": false, - "bypassListManagement": false, - "sandboxMode": false, - "clickTracking": false, - "openTracking": false, - "ganalytics": false, - "subscriptionTracking": false, - "clickTrackingEnableText": false - } - } - } - ] - } -] diff --git a/test/__tests__/data/sfmc_input.json b/test/__tests__/data/sfmc_input.json deleted file mode 100644 index ee6eccb154..0000000000 --- a/test/__tests__/data/sfmc_input.json +++ /dev/null @@ -1,997 +0,0 @@ -[ - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": true, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "userId": 12345, - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "revenue", - "userId": 12345, - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "device": { - "adTrackingEnabled": true, - "type": "iOS", - "manufacturer": "Apple", - "model": "iPhone XR", - "name": "Apple iPhone XR" - }, - "network": { - "bluetooth": "off", - "wifi": "connceted", - "cellular": "active", - "carrier": "Verizon" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Event Name", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "properties": { - "Plan": "plan value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { "from": "Event Name", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [{ "from": "userId", "to": "Contact Key" }], - "eventToUUID": [{ "event": "", "uuid": false }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Event Name", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "device": { - "adTrackingEnabled": true, - "type": "iOS", - "manufacturer": "Apple", - "model": "iPhone XR", - "name": "Apple iPhone XR" - }, - "network": { - "bluetooth": "off", - "wifi": "connceted", - "cellular": "active", - "carrier": "Verizon" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "properties": { - "Plan": "plan value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { "from": "Event Name", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [{ "from": "userId", "to": "Contact Key" }], - "eventToUUID": [{ "event": "Event Name", "uuid": true }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Purchase Event", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "device": { - "adTrackingEnabled": true, - "type": "iOS", - "manufacturer": "Apple", - "model": "iPhone XR", - "name": "Apple iPhone XR" - }, - "network": { - "bluetooth": "off", - "wifi": "connceted", - "cellular": "active", - "carrier": "Verizon" - }, - "traits": { - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "properties": { - "Plan": "plan value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { "from": "Event Name", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [{ "from": "userId", "to": "Contact Key" }], - "eventToUUID": [{ "event": "Event Name", "uuid": true }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Event Name", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "device": { - "adTrackingEnabled": true, - "type": "iOS", - "manufacturer": "Apple", - "model": "iPhone XR", - "name": "Apple iPhone XR" - }, - "network": { - "bluetooth": "off", - "wifi": "connceted", - "cellular": "active", - "carrier": "Verizon" - }, - "traits": { - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "properties": { - "Plan": "plan value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { "from": "Event Name", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [{ "from": "userId", "to": "Contact Key" }], - "eventToUUID": [{ "event": "Event Name", "uuid": true }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Watch", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "properties": { - "Plan": "plan value", - "Price Key": 29.99, - "Guest Key": "2323-34343-3434" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { - "from": "Event Name", - "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" - }, - { "from": "Watch", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [ - { "from": "userId", "to": "User Key" }, - { "from": "watch", "to": "Guest Key" } - ], - "eventToUUID": [{ "event": "Event Name", "uuid": true }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "event": "Watch", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "track", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "properties": { - "Plan": "plan value", - "Price Key": 29.99, - "Contact Key": 12345, - "Guest Key": "2323-34343-3434" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToExternalKey": [ - { - "from": "Event Name", - "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" - }, - { "from": "Watch", "to": "C500FD37-155C-49BD-A21B-AFCEF3D1A9CB" } - ], - "eventToPrimaryKey": [ - { "from": "userId", "to": "User Key" }, - { "from": "watch", "to": "Guest Key, Contact Key" } - ], - "eventToUUID": [{ "event": "Event Name", "uuid": true }], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - } -] diff --git a/test/__tests__/data/sfmc_output.json b/test/__tests__/data/sfmc_output.json deleted file mode 100644 index aaaf23aea8..0000000000 --- a/test/__tests__/data/sfmc_output.json +++ /dev/null @@ -1,311 +0,0 @@ -[ - { - "error": "Creating or updating contacts is disabled. To enable this feature set \"Do Not Create or Update Contacts\" to false" - }, - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "attributeSets": [], - "contactKey": "12345" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "values": { - "Contact Key": "12345", - "App Name": "RudderLabs JavaScript SDK", - "App Version": "1.0.0", - "App Build": "1.0.0", - "UTM Campaign": "Demo Campaign", - "UTM Source": "facebook", - "UTM Medium": "online", - "UTM Term": "Demo terms", - "UTM Content": "Demo content", - "Locale": "en-GB", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "IP Address": "0.0.0.0", - "Screen Density": 2, - "Screen Height": 860, - "Screen Width": 1280, - "Email": "tonmoy@rudderstack.com", - "Name": "Tonmoy Labs" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - } - ], - { - "error": "Either userId or email is required" - }, - { - "error": "Event type is required" - }, - { - "error": "Event type revenue is not supported" - }, - [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "attributeSets": [], - "contactKey": "12345" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "values": { - "Name": "Tonmoy Labs", - "Email": "tonmoy@rudderstack.com", - "Locale": "en-GB", - "App Name": "RudderLabs JavaScript SDK", - "UTM Term": "Demo terms", - "App Build": "1.0.0", - "IP Address": "0.0.0.0", - "UTM Medium": "online", - "UTM Source": "facebook", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "App Version": "1.0.0", - "Contact Key": "12345", - "Device Name": "Apple iPhone XR", - "Device Type": "iOS", - "UTM Content": "Demo content", - "Device-model": "iPhone XR", - "Screen Width": 1280, - "UTM Campaign": "Demo Campaign", - "Wifi Enabled": "connceted", - "Screen Height": 860, - "Screen Density": 2, - "Network Carrier": "Verizon", - "Cellular Enabled": "active", - "Bluetooth Enabled": "off", - "Ad Tracking Enabled": true, - "Device Manufacturer": "Apple" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - } - ], - { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Contact Key:12345", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "values": { - "Plan": "plan value", - "Locale": "en-GB", - "App Name": "RudderLabs JavaScript SDK", - "UTM Term": "Demo terms", - "App Build": "1.0.0", - "IP Address": "0.0.0.0", - "UTM Medium": "online", - "UTM Source": "facebook", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "App Version": "1.0.0", - "Contact Key": "12345", - "UTM Content": "Demo content", - "Screen Width": 1280, - "UTM Campaign": "Demo Campaign", - "Screen Height": 860, - "Screen Density": 2 - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "values": { - "Plan": "plan value", - "Uuid": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "Locale": "en-GB", - "App Name": "RudderLabs JavaScript SDK", - "UTM Term": "Demo terms", - "App Build": "1.0.0", - "IP Address": "0.0.0.0", - "UTM Medium": "online", - "UTM Source": "facebook", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "App Version": "1.0.0", - "Device Name": "Apple iPhone XR", - "Device Type": "iOS", - "UTM Content": "Demo content", - "Device-model": "iPhone XR", - "Screen Width": 1280, - "UTM Campaign": "Demo Campaign", - "Wifi Enabled": "connceted", - "Screen Height": 860, - "Screen Density": 2, - "Network Carrier": "Verizon", - "Cellular Enabled": "active", - "Bluetooth Enabled": "off", - "Ad Tracking Enabled": true, - "Device Manufacturer": "Apple" - } - } - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "version": "1", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Uuid:50360b9c-ea8d-409c-b672-c9230f91cce5" - }, - { - "error": "Event not mapped for this track call" - }, - { - "error": "Either userId or email is required" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "values": { - "Plan": "plan value", - "Locale": "en-GB", - "App Name": "RudderLabs JavaScript SDK", - "UTM Term": "Demo terms", - "App Build": "1.0.0", - "Price Key": 29.99, - "Guest Key": "2323-34343-3434", - "IP Address": "0.0.0.0", - "UTM Medium": "online", - "UTM Source": "facebook", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "App Version": "1.0.0", - "UTM Content": "Demo content", - "Screen Width": 1280, - "UTM Campaign": "Demo Campaign", - "Screen Height": 860, - "Screen Density": 2 - } - } - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "version": "1", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Guest Key:2323-34343-3434" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "values": { - "Plan": "plan value", - "Locale": "en-GB", - "App Name": "RudderLabs JavaScript SDK", - "UTM Term": "Demo terms", - "App Build": "1.0.0", - "Price Key": 29.99, - "Contact Key": 12345, - "Guest Key": "2323-34343-3434", - "IP Address": "0.0.0.0", - "UTM Medium": "online", - "UTM Source": "facebook", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "App Version": "1.0.0", - "UTM Content": "Demo content", - "Screen Width": 1280, - "UTM Campaign": "Demo Campaign", - "Screen Height": 860, - "Screen Density": 2 - } - } - }, - "type": "REST", - "files": {}, - "method": "PUT", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "version": "1", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Guest Key:2323-34343-3434,Contact Key:12345" - } -] diff --git a/test/__tests__/data/sfmc_router_input.json b/test/__tests__/data/sfmc_router_input.json deleted file mode 100644 index ba925030eb..0000000000 --- a/test/__tests__/data/sfmc_router_input.json +++ /dev/null @@ -1,158 +0,0 @@ -[ - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": true, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - }, - { - "message": { - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "campaign": { - "name": "Demo Campaign", - "source": "facebook", - "medium": "online", - "term": "Demo terms", - "content": "Demo content" - }, - "traits": { - "email": "tonmoy@rudderstack.com", - "name": "Tonmoy Labs" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "locale": "en-GB", - "ip": "0.0.0.0", - "screen": { - "density": 2, - "height": 860, - "width": 1280 - } - }, - "type": "identify", - "messageId": "50360b9c-ea8d-409c-b672-c9230f91cce5", - "originalTimestamp": "2019-10-15T09:35:31.288Z", - "userId": "12345", - "userProperties": { - "test_key": "test value" - }, - "sentAt": "2019-10-14T09:03:22.563Z", - "integrations": { - "All": true - } - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - } -] diff --git a/test/__tests__/data/sfmc_router_output.json b/test/__tests__/data/sfmc_router_output.json deleted file mode 100644 index beb90b5e13..0000000000 --- a/test/__tests__/data/sfmc_router_output.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "metadata": [ - { - "jobId": 1 - } - ], - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": true, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - }, - "batched": false, - "statusCode": 400, - "error": "Creating or updating contacts is disabled. To enable this feature set \"Do Not Create or Update Contacts\" to false", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "configuration" - } - }, - { - "batchedRequest": [ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "attributeSets": [], - "contactKey": "12345" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined" - }, - "params": {}, - "body": { - "JSON": { - "values": { - "Contact Key": "12345", - "App Name": "RudderLabs JavaScript SDK", - "App Version": "1.0.0", - "App Build": "1.0.0", - "UTM Campaign": "Demo Campaign", - "UTM Source": "facebook", - "UTM Medium": "online", - "UTM Term": "Demo terms", - "UTM Content": "Demo content", - "Locale": "en-GB", - "User Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "IP Address": "0.0.0.0", - "Screen Density": 2, - "Screen Height": 860, - "Screen Width": 1280, - "Email": "tonmoy@rudderstack.com", - "Name": "Tonmoy Labs" - } - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - } - ], - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "1pYpzzvcn7AQ2W9GGIAZSsN6Mfq", - "Name": "SFMC", - "DestinationDefinition": { - "ID": "1pYpYSeQd8OeN6xPdw6VGDzqUd1", - "Name": "SFMC", - "DisplayName": "Salesforce Marketing Cloud", - "Config": { - "destConfig": [], - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": false, - "supportedSourceTypes": [], - "transformAt": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "clientId": "vcn7AQ2W9GGIAZSsN6Mfq", - "clientSecret": "vcn7AQ2W9GGIAZSsN6Mfq", - "createOrUpdateContacts": false, - "eventDelivery": true, - "eventDeliveryTS": 1615371070621, - "eventToUUID": [], - "externalKey": "f3ffa19b-e0b3-4967-829f-549b781080e6", - "subDomain": "vcn7AQ2W9GGIAZSsN6Mfq" - }, - "Enabled": true, - "Transformations": [] - } - } -] diff --git a/test/__tests__/data/snapchat_custom_audience_proxy_input.json b/test/__tests__/data/snapchat_custom_audience_proxy_input.json deleted file mode 100644 index 89340810b4..0000000000 --- a/test/__tests__/data/snapchat_custom_audience_proxy_input.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://adsapi.snapchat.com/v1/segments/123/users", - "headers": { - "Authorization": "Bearer abcd123", - "Content-Type": "application/json" - }, - "body": { - "JSON": { - "users": [ - { - "schema": [ - "EMAIL_SHA256" - ], - "data": [ - [ - "938758751f5af66652a118e26503af824404bc13acd1cb7642ddff99916f0e1c" - ] - ] - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "snapchat_custom_audience" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://adsapi.snapchat.com/v1/segments/456/users", - "headers": { - "Authorization": "Bearer abcd123", - "Content-Type": "application/json" - }, - "body": { - "JSON": { - "users": [ - { - "schema": [ - "EMAIL_SHA256" - ], - "data": [ - [ - "938758751f5af66652a118e26503af824404bc13acd1cb7642ddff99916f0e1c" - ] - ] - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "snapchat_custom_audience" - } - }, - { - "version": "1", - "type": "REST", - "method": "DELETE", - "endpoint": "https://adsapi.snapchat.com/v1/segments/789/users", - "headers": { - "Authorization": "Bearer abcd123", - "Content-Type": "application/json" - }, - "body": { - "JSON": { - "users": [ - { - "id": "123456", - "schema": [ - "EMAIL_SHA256" - ], - "data": [ - [ - "938758751f5af66652a118e26503af824404bc13acd1cb7642ddff99916f0e1c" - ] - ] - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "snapchat_custom_audience" - } - } -] \ No newline at end of file diff --git a/test/__tests__/data/snapchat_custom_audience_proxy_output.json b/test/__tests__/data/snapchat_custom_audience_proxy_output.json deleted file mode 100644 index e5bcc4faa8..0000000000 --- a/test/__tests__/data/snapchat_custom_audience_proxy_output.json +++ /dev/null @@ -1,71 +0,0 @@ -[ - { - "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "response": { - "request_status": "SUCCESS", - "request_id": "12345", - "users": [ - { - "sub_request_status": "SUCCESS", - "user": { - "number_uploaded_users": 1 - } - } - ] - }, - "status": 200 - } - } - }, - { - "output": { - "status": 500, - "destinationResponse": { - "response": "unauthorized", - "status": 401 - }, - "message": "Failed with unauthorized during snapchat_custom_audience response transformation", - "statTags": { - "destType": "SNAPCHAT_CUSTOM_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "retryable", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - }, - "authErrorCategory": "REFRESH_TOKEN" - } - }, - { - "output": { - "authErrorCategory": "AUTH_STATUS_INACTIVE", - "status": 400, - "destinationResponse": { - "response": { - "request_status": "ERROR", - "request_id": "98e2a602-3cf4-4596-a8f9-7f034161f89a", - "debug_message": "Caller does not have permission", - "display_message": "We're sorry, but the requested resource is not available at this time", - "error_code": "E3002" - }, - "status": 403 - }, - "message": "undefined during snapchat_custom_audience response transformation", - "statTags": { - "destType": "SNAPCHAT_CUSTOM_AUDIENCE", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - } -] diff --git a/test/__tests__/data/tiktok_ads_offline_events_router_input.json b/test/__tests__/data/tiktok_ads_offline_events_router_input.json deleted file mode 100644 index 2986efa804..0000000000 --- a/test/__tests__/data/tiktok_ads_offline_events_router_input.json +++ /dev/null @@ -1,142 +0,0 @@ -[ - { - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "1234567890" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7181537436256731137", - "eventId": "1616318632825_352", - "order_id": "abc_xyz", - "shop_id": "123abc", - "currency": "USD", - "value": 46.0, - "price": 8, - "quantity": 2, - "content_type": "product1234", - "product_id": "1077218", - "name": "socks", - "category": "Men's cloth" - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - }, - { - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "1234567890", - "email": "random@mail.com" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7181537436256731137", - "eventId": "1616318632825_352", - "products": [ - { - "price": 8, - "quantity": 2, - "content_type": "product1", - "product_id": "1077218", - "name": "socks", - "category": "Men's cloth" - }, - { - "price": 18, - "quantity": 12, - "content_type": "product2", - "product_id": "1077219", - "name": "socks1", - "category": "Men's cloth1" - } - ] - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - }, - { - "metadata": { - "jobId": 3 - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "1234567890" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "6071537445256731123", - "eventId": "1616318632825_352", - "currency": "USD", - "value": 46.0, - "price": 8, - "content_type": "product1234" - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - }, - { - "metadata": { - "jobId": 4 - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "context": { - "traits": { - "phone": "1234567890" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "2345676543", - "eventId": "1616318632825_352" - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - } -] diff --git a/test/__tests__/data/tiktok_ads_offline_events_router_output.json b/test/__tests__/data/tiktok_ads_offline_events_router_output.json deleted file mode 100644 index 9fc45461be..0000000000 --- a/test/__tests__/data/tiktok_ads_offline_events_router_output.json +++ /dev/null @@ -1,193 +0,0 @@ -[ - { - "batched": true, - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7181537436256731137", - "partner_name": "RudderStack", - "batch": [ - { - "event_set_id": "7181537436256731137", - "event": "Subscribe", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - }, - "properties": { - "order_id": "abc_xyz", - "shop_id": "123abc", - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "product1234", - "content_id": "1077218", - "content_name": "socks", - "content_category": "Men's cloth" - } - ], - "event_channel": "web", - "currency": "USD", - "value": 46.0 - } - }, - { - "event_set_id": "7181537436256731137", - "event": "Subscribe", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ], - "emails": ["d9fcca64ec1b250da4261a3f89a8e0f7749c4e0f5a1a918e5397194c8b5a9f16"] - } - }, - "properties": { - "event_channel": "web", - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "product1", - "content_id": "1077218", - "content_name": "socks", - "content_category": "Men's cloth" - }, - { - "price": 18, - "quantity": 12, - "content_type": "product2", - "content_id": "1077219", - "content_name": "socks1", - "content_category": "Men's cloth1" - } - ] - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "metadata": [ - { - "jobId": 1 - }, - { - "jobId": 2 - } - ], - "statusCode": 200 - }, - { - "batched": true, - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "6071537445256731123", - "partner_name": "RudderStack", - "batch": [ - { - "event_set_id": "6071537445256731123", - "event": "Subscribe", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - }, - "properties": { - "contents": [ - { - "price": 8, - "content_type": "product1234" - } - ], - "event_channel": "web", - "currency": "USD", - "value": 46.0 - } - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "metadata": [ - { - "jobId": 3 - } - ], - "statusCode": 200 - }, - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "batched": false, - "error": "Event name is required", - "metadata": [ - { - "jobId": 4 - } - ], - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation" - }, - "statusCode": 400 - } -] diff --git a/test/__tests__/data/tiktok_ads_proxy_input.json b/test/__tests__/data/tiktok_ads_proxy_input.json deleted file mode 100644 index 6028fa1e4f..0000000000 --- a/test/__tests__/data/tiktok_ads_proxy_input.json +++ /dev/null @@ -1,368 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "successResponse" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": "1077218" - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": "1197218" - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "tiktok_ads" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "invalidDataTypeResponse" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": 1077218 - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": 1197218 - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "tiktok_ads" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "invalidPermissionsResponse" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": 1077218 - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": 1197218 - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "tiktok_ads" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "tooManyRequests" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": 1077218 - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": 1197218 - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "params": { - "destination": "tiktok_ads" - } - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "502-BadGateway" - }, - "params": { - "destination": "tiktok_ads" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": 1077218 - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": 1197218 - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.2/pixel/batch/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json", - "test-dest-response-key": "500-NoResponse" - }, - "params": { - "destination": "tiktok_ads" - }, - "body": { - "JSON": { - "pixel_code": "A1T8T4UYGVIQA8ORZMX9", - "partner_name": "RudderStack", - "event": "CompletePayment", - "event_id": "1616318632825_357", - "timestamp": "2020-09-17T19:49:27Z", - "properties": { - "contents": [ - { - "price": 8, - "quantity": 2, - "content_type": "socks", - "content_id": 1077218 - }, - { - "price": 30, - "quantity": 1, - "content_type": "dress", - "content_id": 1197218 - } - ], - "currency": "USD", - "value": 46 - }, - "context": { - "ad": { - "callback": "123ATXSfe" - }, - "page": { - "url": "http://demo.mywebsite.com/purchase", - "referrer": "http://demo.mywebsite.com" - }, - "user": { - "external_id": "f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc", - "phone_number": "2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea", - "email": "dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f" - }, - "ip": "13.57.97.131", - "user_agent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/tiktok_ads_proxy_output.json b/test/__tests__/data/tiktok_ads_proxy_output.json deleted file mode 100644 index 99cc79d5f2..0000000000 --- a/test/__tests__/data/tiktok_ads_proxy_output.json +++ /dev/null @@ -1,124 +0,0 @@ -[ - { - "output": { - "status": 200, - "message": "[TIKTOK_ADS Response Handler] - Request Processed Successfully", - "destinationResponse": { - "response": { - "code": 0, - "message": "OK" - }, - "status": 200 - } - } - }, - { - "output": { - "status": 400, - "message": "Request failed with status: 40002", - "destinationResponse": { - "response": { - "code": 40002, - "message": "Batch.0.properties.contents.0.content_id: Not a valid string" - }, - "status": 200 - }, - "statTags": { - "destType": "TIKTOK_ADS", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 400, - "message": "Request failed with status: 40001", - "destinationResponse": { - "response": { - "code": 40001, - "message": "No permission to operate pixel code: BU35TSQHT2A1QT375OMG. You must be an admin or operator of this advertiser account." - }, - "status": 200 - }, - "statTags": { - "destType": "TIKTOK_ADS", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "aborted", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 429, - "message": "Request failed with status: 40100", - "destinationResponse": { - "response": { - "code": 40100, - "message": "Too many requests. Please retry in some time." - }, - "status": 200 - }, - "statTags": { - "destType": "TIKTOK_ADS", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "throttled", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 502, - "message": "Request failed with status: 502", - "destinationResponse": { - "response": "\r\n502 Bad Gateway\r\n\r\n

502 Bad Gateway

\r\n
nginx
\r\n\r\n\r\n", - "status": 502 - }, - "statTags": { - "destType": "TIKTOK_ADS", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "retryable", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - }, - { - "output": { - "status": 500, - "message": "Request failed with status: 500", - "destinationResponse": { - "response": "[ECONNRESET] :: Connection reset by peer", - "status": 500 - }, - "statTags": { - "destType": "TIKTOK_ADS", - "errorCategory": "network", - "destinationId": "Non-determininable", - "workspaceId": "Non-determininable", - "errorType": "retryable", - "feature": "dataDelivery", - "implementation": "native", - "module": "destination" - } - } - } -] \ No newline at end of file diff --git a/test/__tests__/data/userlist_cdk_output.json b/test/__tests__/data/userlist_cdk_output.json deleted file mode 100644 index 5de9e806d1..0000000000 --- a/test/__tests__/data/userlist_cdk_output.json +++ /dev/null @@ -1,248 +0,0 @@ -[ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "anonymousId": "123456", - "email": "test@rudderstack.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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "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 - }, - "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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "statusCode": 400, - "error": "userId is required" - }, - { - "statusCode": 400, - "error": "userId is required" - }, - { - "statusCode": 400, - "error": "userId is required" - }, - { - "statusCode": 400, - "error": "message type page is not supported" - }, - { - "statusCode": 400, - "error": "message type screen is not supported" - } -] diff --git a/test/__tests__/data/userlist_input.json b/test/__tests__/data/userlist_input.json deleted file mode 100644 index d8dcd4abb8..0000000000 --- a/test/__tests__/data/userlist_input.json +++ /dev/null @@ -1,537 +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": "test@rudderstack.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": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "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 - }, - "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": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "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": "test@rudderstack.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", - "address": { - "city": "NY", - "country": "USA", - "postalCode": 712136, - "state": "CA", - "street": "" - } - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "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 - }, - "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", - "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": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": { - "name": "", - "version": "" - }, - "screen": { - "density": 2 - } - }, - "type": "screen", - "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71", - "originalTimestamp": "2019-10-14T11:15:18.299Z", - "anonymousId": "00000000000000000000000000", - "userId": "12345", - "properties": { - "path": "/abc", - "referrer": "", - "search": "", - "title": "", - "url": "", - "category": "test-category" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z" - }, - "destination": { - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - }, - "Config": { - "pushKey": "userlist-push-key" - } - } - } -] diff --git a/test/__tests__/data/userlist_output.json b/test/__tests__/data/userlist_output.json deleted file mode 100644 index 27eb9320f1..0000000000 --- a/test/__tests__/data/userlist_output.json +++ /dev/null @@ -1,251 +0,0 @@ -[ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "anonymousId": "123456", - "email": "test@rudderstack.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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST", - "statusCode": 200 - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST", - "statusCode": 200 - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "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 - }, - "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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST", - "statusCode": 200 - }, - { - "statusCode": 400, - "error": "Missing required value from \"userIdOnly\"" - }, - { - "statusCode": 400, - "error": "Missing required value from \"userIdOnly\"" - }, - { - "statusCode": 400, - "error": "Missing required value from \"userIdOnly\"" - }, - { - "statusCode": 400, - "error": "message type \"page\" not supported for \"userlist\"" - }, - { - "statusCode": 400, - "error": "message type \"screen\" not supported for \"userlist\"" - } -] diff --git a/test/__tests__/data/userlist_router_input.json b/test/__tests__/data/userlist_router_input.json deleted file mode 100644 index 4feb367454..0000000000 --- a/test/__tests__/data/userlist_router_input.json +++ /dev/null @@ -1,128 +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": "test@rudderstack.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" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "message": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "pushKey": "userlist-push-key" - } - } - } -] diff --git a/test/__tests__/data/userlist_router_output.json b/test/__tests__/data/userlist_router_output.json deleted file mode 100644 index 2c5ed6149b..0000000000 --- a/test/__tests__/data/userlist_router_output.json +++ /dev/null @@ -1,172 +0,0 @@ -[ - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "anonymousId": "123456", - "email": "test@rudderstack.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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST", - "statusCode": 200 - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "pushKey": "userlist-push-key" - } - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "traits": { - "email": "test@rudderstack.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": "00000000000000000000000000", - "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" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://incoming.userlist.com/rudderstack/events", - "headers": { - "Authorization": "Push userlist-push-key", - "Content-Type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST", - "statusCode": 200 - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "pushKey": "userlist-push-key" - } - } - } -] diff --git a/test/__tests__/data/vitally_cdk_output.json b/test/__tests__/data/vitally_cdk_output.json deleted file mode 100644 index 1982d00665..0000000000 --- a/test/__tests__/data/vitally_cdk_output.json +++ /dev/null @@ -1,83 +0,0 @@ -[ - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "event": "this is a track event", - "type": "track", - "properties": { - "thing": "amazing!" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "identify", - "traits": { - "name": "Johnny Appleseed" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "group", - "groupId": "5de17322-934e-11ed-a1eb-0242ac120002", - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "statusCode": 400, - "error": "message type page is not supported" - } -] diff --git a/test/__tests__/data/vitally_input.json b/test/__tests__/data/vitally_input.json deleted file mode 100644 index e971823e9c..0000000000 --- a/test/__tests__/data/vitally_input.json +++ /dev/null @@ -1,81 +0,0 @@ -[ - { - "message": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "event": "this is a track event", - "type": "track", - "properties": { - "thing": "amazing!" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - }, - "destination": { - "Config": { - "apiKeyVitally": "abc123" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - } - }, - { - "message": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "identify", - "traits": { - "name": "Johnny Appleseed" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - }, - "destination": { - "Config": { - "apiKeyVitally": "abc123" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - } - }, - { - "message": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "group", - "groupId": "5de17322-934e-11ed-a1eb-0242ac120002", - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - }, - "destination": { - "Config": { - "apiKeyVitally": "abc123" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - } - }, - { - "message": { - "type": "page", - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - }, - "destination": { - "Config": { - "apiKeyVitally": "abc123" - }, - "DestinationDefinition": { - "Config": { - "cdkEnabled": true - } - } - } - } -] diff --git a/test/__tests__/data/vitally_output.json b/test/__tests__/data/vitally_output.json deleted file mode 100644 index 5e7eb598c7..0000000000 --- a/test/__tests__/data/vitally_output.json +++ /dev/null @@ -1,83 +0,0 @@ -[ - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "event": "this is a track event", - "type": "track", - "properties": { - "thing": "amazing!" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "identify", - "traits": { - "name": "Johnny Appleseed" - }, - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "body": { - "FORM": {}, - "JSON_ARRAY": {}, - "XML": {}, - "JSON": { - "userId": "0220c056-934e-11ed-a1eb-0242ac120002", - "type": "group", - "groupId": "5de17322-934e-11ed-a1eb-0242ac120002", - "originalTimestamp": "2023-01-13T09:03:17.562Z", - "sentAt": "2023-01-13T09:03:17.562Z" - } - }, - "endpoint": "https://api.vitally.io/rudderstack", - "files": {}, - "params": {}, - "type": "REST", - "version": "1", - "method": "POST", - "headers": { - "authorization": "Basic abc123", - "content-type": "application/json" - } - }, - { - "statusCode": 400, - "error": "message type \"page\" not supported for \"vitally\"" - } -] diff --git a/test/__tests__/data/webhook_input.json b/test/__tests__/data/webhook_input.json deleted file mode 100644 index 9d34a0ace3..0000000000 --- a/test/__tests__/data/webhook_input.json +++ /dev/null @@ -1,1148 +0,0 @@ -[ - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60.ngrok.io/n" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60." - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "k1": "v1", - "k2": { - "k3": "c3", - "k4": { - "k5": "c5" - } - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60.", - "webhookMethod": "GET", - "headers": [ - { - "from": "X-customHeader", - "to": "customHeaderVal" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "k1": "v1", - "k2": { - "k3": "c3", - "k4": { - "k5": "c5" - } - } - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60.", - "webhookMethod": "GET" - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "request_ip": "127.0.0.1" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "header": [ - { - "from": "test1", - "to": "value1" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "request_ip": "127.0.0.1" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "Content-Type", - "to": "application/xml" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "Content-Type", - "to": "application/xml" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "header": { - "dynamic_header_key_string": "dynamic_header_value_string", - "dynamic_header_key_num": 10, - "dynamic_header_key_object": { - "k1": "v1" - } - }, - "appendPath": "/product/search?string=value" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "fullPath": "https://www.google.com" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "fullPath": "https://www.google.com/", - "appendPath": "?searchTerms=cats" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "fullPath": "https://www.google.com/", - "appendPath": "?searchTerms=cats" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "webhookMethod": "PUT", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "fullPath": "https://www.google.com/", - "appendPath": "?searchTerms=cats" - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "webhookMethod": "DELETE", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "webhookMethod": "POST", - "headers": [ - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "webhookMethod": "PATCH", - "headers": [ - { - "from": "test2", - "to": "value2" - } - ] - } - } - } -] diff --git a/test/__tests__/data/webhook_output.json b/test/__tests__/data/webhook_output.json deleted file mode 100644 index 69a55ee348..0000000000 --- a/test/__tests__/data/webhook_output.json +++ /dev/null @@ -1,1075 +0,0 @@ -[ - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "user_properties": { - "total_payments": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "level": 6, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "coin_balance": 9466052, - "player_total_shields": 0, - "isLowEndDevice": false, - "game_fps": 30, - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "graphicsQuality": "HD", - "current_module_name": "CasinoGameModule", - "player_total_battles": 0, - "lifetime_gem_balance": 0, - "gem_balance": 0, - "fb_profile": "0", - "start_date": "2019-08-01", - "versionSessionCount": 2, - "game_name": "FireEagleSlots" - }, - "integrations": { - "All": true - }, - "event": "spin_result", - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "device": { - "model": "Redmi 6", - "manufacturer": "Xiaomi", - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "name": "xiaomi" - }, - "traits": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "address": { - "city": "Dhaka", - "country": "Bangladesh" - } - }, - "os": { - "version": "8.1.0", - "name": "android" - }, - "network": { - "carrier": "Banglalink" - } - }, - "type": "track", - "properties": { - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "jackpot_win_type": "Silver", - "coin_balance": 9466052, - "bet_level": 1, - "ishighroller": "False", - "tournament_id": "T1561970819", - "battle_id": "N/A", - "bet_amount": 9, - "fb_profile": "0", - "player_total_shields": 0, - "is_turbo": "False", - "player_total_battles": 0, - "bet_multiplier": 1, - "start_date": "2019-08-01", - "versionSessionCount": 2, - "graphicsQuality": "HD", - "is_auto_spin": "False", - "days_in_game": 0, - "additional_bet_index": 0, - "isLowEndDevice": "False", - "game_fps": 30, - "extra_param": "N/A", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "current_module_name": "CasinoGameModule", - "game_id": "fireEagleBase", - "featureGameType": "N/A", - "gem_balance": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "total_payments": 0, - "level": 6, - "win_amount": 0, - "no_of_spin": 1, - "game_name": "FireEagleSlots", - "jackpot_win_amount": 90, - "lifetime_gem_balance": 0, - "isf": "False" - } - }, - "FORM": {} - }, - "files": {}, - "endpoint": "http://6b0e6a60.ngrok.io", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "user_properties": { - "total_payments": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "level": 6, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "coin_balance": 9466052, - "player_total_shields": 0, - "isLowEndDevice": false, - "game_fps": 30, - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "graphicsQuality": "HD", - "current_module_name": "CasinoGameModule", - "player_total_battles": 0, - "lifetime_gem_balance": 0, - "gem_balance": 0, - "fb_profile": "0", - "start_date": "2019-08-01", - "versionSessionCount": 2, - "game_name": "FireEagleSlots" - }, - "integrations": { - "All": true - }, - "event": "spin_result", - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "device": { - "model": "Redmi 6", - "manufacturer": "Xiaomi", - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "name": "xiaomi" - }, - "traits": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "address": { - "city": "Dhaka", - "country": "Bangladesh" - } - }, - "os": { - "version": "8.1.0", - "name": "android" - }, - "network": { - "carrier": "Banglalink" - } - }, - "type": "track", - "properties": { - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "jackpot_win_type": "Silver", - "coin_balance": 9466052, - "bet_level": 1, - "ishighroller": "False", - "tournament_id": "T1561970819", - "battle_id": "N/A", - "bet_amount": 9, - "fb_profile": "0", - "player_total_shields": 0, - "is_turbo": "False", - "player_total_battles": 0, - "bet_multiplier": 1, - "start_date": "2019-08-01", - "versionSessionCount": 2, - "graphicsQuality": "HD", - "is_auto_spin": "False", - "days_in_game": 0, - "additional_bet_index": 0, - "isLowEndDevice": "False", - "game_fps": 30, - "extra_param": "N/A", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "current_module_name": "CasinoGameModule", - "game_id": "fireEagleBase", - "featureGameType": "N/A", - "gem_balance": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "total_payments": 0, - "level": 6, - "win_amount": 0, - "no_of_spin": 1, - "game_name": "FireEagleSlots", - "jackpot_win_amount": 90, - "lifetime_gem_balance": 0, - "isf": "False" - } - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://6b0e6a60.ngrok.io/n", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "user_properties": { - "total_payments": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "level": 6, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "coin_balance": 9466052, - "player_total_shields": 0, - "isLowEndDevice": false, - "game_fps": 30, - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "graphicsQuality": "HD", - "current_module_name": "CasinoGameModule", - "player_total_battles": 0, - "lifetime_gem_balance": 0, - "gem_balance": 0, - "fb_profile": "0", - "start_date": "2019-08-01", - "versionSessionCount": 2, - "game_name": "FireEagleSlots" - }, - "integrations": { - "All": true - }, - "event": "spin_result", - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "device": { - "model": "Redmi 6", - "manufacturer": "Xiaomi", - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "name": "xiaomi" - }, - "traits": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "address": { - "city": "Dhaka", - "country": "Bangladesh" - } - }, - "os": { - "version": "8.1.0", - "name": "android" - }, - "network": { - "carrier": "Banglalink" - } - }, - "type": "track", - "properties": { - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "jackpot_win_type": "Silver", - "coin_balance": 9466052, - "bet_level": 1, - "ishighroller": "False", - "tournament_id": "T1561970819", - "battle_id": "N/A", - "bet_amount": 9, - "fb_profile": "0", - "player_total_shields": 0, - "is_turbo": "False", - "player_total_battles": 0, - "bet_multiplier": 1, - "start_date": "2019-08-01", - "versionSessionCount": 2, - "graphicsQuality": "HD", - "is_auto_spin": "False", - "days_in_game": 0, - "additional_bet_index": 0, - "isLowEndDevice": "False", - "game_fps": 30, - "extra_param": "N/A", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "current_module_name": "CasinoGameModule", - "game_id": "fireEagleBase", - "featureGameType": "N/A", - "gem_balance": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "total_payments": 0, - "level": 6, - "win_amount": 0, - "no_of_spin": 1, - "game_name": "FireEagleSlots", - "jackpot_win_amount": 90, - "lifetime_gem_balance": 0, - "isf": "False" - } - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://6b0e6a60.", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://6b0e6a60.", - "headers": { - "x-customheader": "customHeaderVal" - }, - "params": { - "k1": "v1", - "k2.k3": "c3", - "k2.k4.k5": "c5" - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - { - "version": "1", - "type": "REST", - "method": "GET", - "endpoint": "https://6b0e6a60.", - "headers": {}, - "params": { - "k1": "v1", - "k2.k3": "c3", - "k2.k4.k5": "c5" - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://6b0e6a60.ngrok.io", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "127.0.0.1" - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "request_ip": "127.0.0.1" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://6b0e6a60.ngrok.io", - "headers": { - "content-type": "application/xml", - "test2": "value2" - }, - "params": {}, - "body": { - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - "ip": "127.0.0.1" - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "request_ip": "127.0.0.1" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "http://6b0e6a60.ngrok.io", - "headers": { - "content-type": "application/xml", - "test2": "value2" - }, - "params": {}, - "body": { - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "http://6b0e6a60.ngrok.io/product/search?string=value", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2", - "dynamic_header_key_string": "dynamic_header_value_string" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://www.google.com", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://www.google.com/?searchTerms=cats", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track" - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://www.google.com/?searchTerms=cats", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "PUT" - }, - { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": {}, - "FORM": {} - }, - "files": {}, - "endpoint": "https://www.google.com/?searchTerms=cats", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "test2": "value2" - }, - "version": "1", - "params": { - "additional_bet_index": 0, - "battle_id": "N/A", - "featureGameType": "N/A", - "win_amount": 0 - }, - "type": "REST", - "method": "DELETE" - }, - { - "body": { - "FORM": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "http://6b0e6a60.ngrok.io", - "files": {}, - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "method": "POST", - "params": {}, - "type": "REST", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "version": "1" - }, - { - "body": { - "FORM": {}, - "JSON": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "http://6b0e6a60.ngrok.io", - "files": {}, - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "method": "PATCH", - "params": {}, - "type": "REST", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "version": "1" - } -] diff --git a/test/__tests__/data/webhook_router_input.json b/test/__tests__/data/webhook_router_input.json deleted file mode 100644 index c78f30a7cd..0000000000 --- a/test/__tests__/data/webhook_router_input.json +++ /dev/null @@ -1,214 +0,0 @@ -[ - [ - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "message": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "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" - }, - "traits": { - "address": { - "city": "Dhaka", - "country": "Bangladesh" - }, - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1" - } - }, - "event": "spin_result", - "integrations": { - "All": true - }, - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "properties": { - "additional_bet_index": 0, - "battle_id": "N/A", - "bet_amount": 9, - "bet_level": 1, - "bet_multiplier": 1, - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "days_in_game": 0, - "extra_param": "N/A", - "fb_profile": "0", - "featureGameType": "N/A", - "game_fps": 30, - "game_id": "fireEagleBase", - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": "False", - "is_auto_spin": "False", - "is_turbo": "False", - "isf": "False", - "ishighroller": "False", - "jackpot_win_amount": 90, - "jackpot_win_type": "Silver", - "level": 6, - "lifetime_gem_balance": 0, - "no_of_spin": 1, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "tournament_id": "T1561970819", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2, - "win_amount": 0 - }, - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "type": "track", - "user_properties": { - "coin_balance": 9466052, - "current_module_name": "CasinoGameModule", - "fb_profile": "0", - "game_fps": 30, - "game_name": "FireEagleSlots", - "gem_balance": 0, - "graphicsQuality": "HD", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "internetReachability": "ReachableViaLocalAreaNetwork", - "isLowEndDevice": false, - "level": 6, - "lifetime_gem_balance": 0, - "player_total_battles": 0, - "player_total_shields": 0, - "start_date": "2019-08-01", - "total_payments": 0, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "versionSessionCount": 2 - } - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60.ngrok.io/n" - } - } - } - ] -] diff --git a/test/__tests__/data/webhook_router_output.json b/test/__tests__/data/webhook_router_output.json deleted file mode 100644 index c398b28981..0000000000 --- a/test/__tests__/data/webhook_router_output.json +++ /dev/null @@ -1,257 +0,0 @@ -[ - [ - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "user_properties": { - "total_payments": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "level": 6, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "coin_balance": 9466052, - "player_total_shields": 0, - "isLowEndDevice": false, - "game_fps": 30, - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "graphicsQuality": "HD", - "current_module_name": "CasinoGameModule", - "player_total_battles": 0, - "lifetime_gem_balance": 0, - "gem_balance": 0, - "fb_profile": "0", - "start_date": "2019-08-01", - "versionSessionCount": 2, - "game_name": "FireEagleSlots" - }, - "integrations": { - "All": true - }, - "event": "spin_result", - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "device": { - "model": "Redmi 6", - "manufacturer": "Xiaomi", - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "name": "xiaomi" - }, - "traits": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "address": { - "city": "Dhaka", - "country": "Bangladesh" - } - }, - "os": { - "version": "8.1.0", - "name": "android" - }, - "network": { - "carrier": "Banglalink" - } - }, - "type": "track", - "properties": { - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "jackpot_win_type": "Silver", - "coin_balance": 9466052, - "bet_level": 1, - "ishighroller": "False", - "tournament_id": "T1561970819", - "battle_id": "N/A", - "bet_amount": 9, - "fb_profile": "0", - "player_total_shields": 0, - "is_turbo": "False", - "player_total_battles": 0, - "bet_multiplier": 1, - "start_date": "2019-08-01", - "versionSessionCount": 2, - "graphicsQuality": "HD", - "is_auto_spin": "False", - "days_in_game": 0, - "additional_bet_index": 0, - "isLowEndDevice": "False", - "game_fps": 30, - "extra_param": "N/A", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "current_module_name": "CasinoGameModule", - "game_id": "fireEagleBase", - "featureGameType": "N/A", - "gem_balance": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "total_payments": 0, - "level": 6, - "win_amount": 0, - "no_of_spin": 1, - "game_name": "FireEagleSlots", - "jackpot_win_amount": 90, - "lifetime_gem_balance": 0, - "isf": "False" - } - }, - "FORM": {} - }, - "files": {}, - "endpoint": "http://6b0e6a60.ngrok.io", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json", - "test2": "value2" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "webhookUrl": "http://6b0e6a60.ngrok.io", - "headers": [ - { - "from": "", - "to": "" - }, - { - "from": "test2", - "to": "value2" - } - ] - } - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "JSON": { - "timestamp": "2019-09-01T15:46:51.693229+05:30", - "user_properties": { - "total_payments": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "level": 6, - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "coin_balance": 9466052, - "player_total_shields": 0, - "isLowEndDevice": false, - "game_fps": 30, - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "graphicsQuality": "HD", - "current_module_name": "CasinoGameModule", - "player_total_battles": 0, - "lifetime_gem_balance": 0, - "gem_balance": 0, - "fb_profile": "0", - "start_date": "2019-08-01", - "versionSessionCount": 2, - "game_name": "FireEagleSlots" - }, - "integrations": { - "All": true - }, - "event": "spin_result", - "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8", - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "context": { - "device": { - "model": "Redmi 6", - "manufacturer": "Xiaomi", - "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R", - "name": "xiaomi" - }, - "traits": { - "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "address": { - "city": "Dhaka", - "country": "Bangladesh" - } - }, - "os": { - "version": "8.1.0", - "name": "android" - }, - "network": { - "carrier": "Banglalink" - } - }, - "type": "track", - "properties": { - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "jackpot_win_type": "Silver", - "coin_balance": 9466052, - "bet_level": 1, - "ishighroller": "False", - "tournament_id": "T1561970819", - "battle_id": "N/A", - "bet_amount": 9, - "fb_profile": "0", - "player_total_shields": 0, - "is_turbo": "False", - "player_total_battles": 0, - "bet_multiplier": 1, - "start_date": "2019-08-01", - "versionSessionCount": 2, - "graphicsQuality": "HD", - "is_auto_spin": "False", - "days_in_game": 0, - "additional_bet_index": 0, - "isLowEndDevice": "False", - "game_fps": 30, - "extra_param": "N/A", - "idfa": "2bf99787-33d2-4ae2-a76a-c49672f97252", - "current_module_name": "CasinoGameModule", - "game_id": "fireEagleBase", - "featureGameType": "N/A", - "gem_balance": 0, - "internetReachability": "ReachableViaLocalAreaNetwork", - "total_payments": 0, - "level": 6, - "win_amount": 0, - "no_of_spin": 1, - "game_name": "FireEagleSlots", - "jackpot_win_amount": 90, - "lifetime_gem_balance": 0, - "isf": "False" - } - }, - "FORM": {} - }, - "files": {}, - "endpoint": "https://6b0e6a60.ngrok.io/n", - "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1", - "headers": { - "content-type": "application/json" - }, - "version": "1", - "params": {}, - "type": "REST", - "method": "POST" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "webhookUrl": "https://6b0e6a60.ngrok.io/n" - } - } - } - ] -] diff --git a/test/__tests__/data/woopra.json b/test/__tests__/data/woopra.json deleted file mode 100644 index 5819eba13a..0000000000 --- a/test/__tests__/data/woopra.json +++ /dev/null @@ -1,281 +0,0 @@ -[ - { - "description": "Create a new Visitor with projectName inside Integration Object and no externalId", - "input": { - "message": { - "anonymousId": "21e13f4bc7ceddad", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "anonymousId": "21e13f4bc7ceddad" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" - }, - "event": "First Investment", - "integrations": { - "woopra": { - "projectName": "abc.com" - } - }, - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "traits": { - "name": "John Doe", - "email": "test@r.com", - "hasPurchased": "yes", - "address": "H.No. abc Street PQRS ", - "state": "Delhi", - "title": "Mr" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "identify" - }, - "destination": { - "Config": { - "projectName": "int.com" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "GET", - "params": { - "os": "Android", - "app": "RuddCDN", - "browser": "Chrome86.0.4240.111", - "cookie": "21e13f4bc7ceddad", - "Project": "abc.com", - "cv_email": "test@r.com", - "cv_name": "John Doe", - "cv_state": "Delhi", - "cv_title": "Mr", - "cv_hasPurchased": "yes", - "timestamp": "1601371229907", - "cv_address": "H.No. abc Street PQRS " - }, - "headers": {}, - "version": "1", - "endpoint": "https://www.woopra.com/track/identify" - } - }, - { - "description": "Send track event with app name but no app build and woopraid inside externalid", - "input": { - "message": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "context": { - "externalId": [ - { - "type": "woopraId", - "id": "abcd123451" - } - ], - "app": { - "build": "4" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "anonymousId": "21e13f4bc7ceddad", - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "event": "First Investment", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "properties": { - "currency": "EUR", - "revenue": 20.37566 - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "track" - }, - "destination": { - "Config": { - "projectName": "int.com" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "GET", - "params": { - "os": "Android", - "event": "First Investment", - "cookie": "abcd123451", - "Project": "int.com", - "timestamp": "1601371229907", - "ce_currency": "EUR", - "ce_revenue": 20.37566, - "cv_customProp": "customValue", - "cv_anonymousId": "21e13f4bc7ceddad" - }, - "headers": {}, - "version": "1", - "endpoint": "https://www.woopra.com/track/ce" - } - }, - { - "description": "Send Page event with projectName from Config and no cv_id sources", - "input": { - "message": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "context": { - "app": { - "build": "4", - "name": "RuddCDN" - }, - "page": { - "referrer": "google.com" - }, - "device": { - "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a", - "name": "generic_x86_arm" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.6" - }, - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "name": "Home", - "messageId": "1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "sentAt": "2020-09-28T19:53:44.998Z", - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "page" - }, - "destination": { - "Config": { - "projectName": "abc.com" - } - } - }, - "output": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "GET", - "params": { - "os": "Android", - "app": "RuddCDN", - "event": "Viewed Home Page", - "ce_url": "http://www.rudderstack.com", - "timestamp": "1601371229907", - "Project": "abc.com", - "ce_title": "Home | RudderStack", - "cv_customProp": "customValue", - "cookie": "21e13f4bc7ceddad", - "ce_referrer": "google.com" - }, - "headers": {}, - "version": "1", - "endpoint": "https://www.woopra.com/track/ce" - } - }, - { - "description": "Unsupported Message Type", - "input": { - "message": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "event": "First Investment", - "integrations": { - "woopra": "int.com" - }, - "type": "group" - }, - "destination": { - "Config": { - "projectName": "int.com" - } - } - }, - "output": { - "error": "Message type group is not supported" - } - }, - { - "description": "Event Name Not Provided ", - "input": { - "message": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "integrations": { - "woopra": "int.com" - }, - "type": "track" - }, - "destination": { - "Config": { - "projectName": "int.com" - } - } - }, - "output": { - "error": "Event Name can not be empty" - } - } -] diff --git a/test/__tests__/data/zapier_cdk_output.json b/test/__tests__/data/zapier_cdk_output.json deleted file mode 100644 index 13b4e3d761..0000000000 --- a/test/__tests__/data/zapier_cdk_output.json +++ /dev/null @@ -1,242 +0,0 @@ -[ - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "abcd.zap-hook", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "first", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "def.zap-hook", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "def", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "page.zap-hook", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "name": "page_test", - "userId": "identified user id", - "type": "page", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "screen.zap-hook", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "name": "screen_test", - "userId": "identified user id", - "type": "screen", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "ghi.zap-hook", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event": "def", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { - "trait1": "new-val" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "properties": { - "abc": "123", - "key": { - "abc": 123 - }, - "array": [ - { - "abc": 123 - }, - { - "def": 123 - } - ] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - } -] diff --git a/test/__tests__/data/zapier_input.json b/test/__tests__/data/zapier_input.json deleted file mode 100644 index 82ae2e11ac..0000000000 --- a/test/__tests__/data/zapier_input.json +++ /dev/null @@ -1,176 +0,0 @@ -[ - { - "message": { - "event": "first", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { "trait1": "new-val" }, - "ip": "14.5.67.21", - "library": { "name": "http" } - }, - "properties": { - "abc": "123", - "key": { "abc": 123 }, - "array": [{ "abc": 123 }, { "def": 123 }] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "destination": { - "DestinationDefinition": { "Config": { "cdkEnabled": true } }, - "Config": { "zapUrl": "abcd.zap-hook", "trackEventsToZap": {}, "pageScreenEventsToZap": {} }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "def", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { "trait1": "new-val" }, - "ip": "14.5.67.21", - "library": { "name": "http" } - }, - "properties": { - "abc": "123", - "key": { "abc": 123 }, - "array": [{ "abc": 123 }, { "def": 123 }] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "destination": { - "DestinationDefinition": { "Config": { "cdkEnabled": true } }, - "Config": { - "zapUrl": "abcd.zap-hook", - "trackEventsToZap": [ - { "from": "def", "to": "def.zap-hook" }, - { "from": "ghi", "to": "ghi.zap-hook" } - ], - "pageScreenEventsToZap": {} - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "name": "page_test", - "userId": "identified user id", - "type": "page", - "anonymousId": "anon-id-new", - "context": { - "traits": { "trait1": "new-val" }, - "ip": "14.5.67.21", - "library": { "name": "http" } - }, - "properties": { - "abc": "123", - "key": { "abc": 123 }, - "array": [{ "abc": 123 }, { "def": 123 }] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "destination": { - "DestinationDefinition": { "Config": { "cdkEnabled": true } }, - "Config": { - "zapUrl": "abcd.zap-hook", - "trackEventsToZap": [ - { "from": "def", "to": "def.zap-hook" }, - { "from": "ghi", "to": "ghi.zap-hook" } - ], - "pageScreenEventsToZap": [ - { "from": "page_test", "to": "page.zap-hook" }, - { "from": "ghi", "to": "ghi.zap-hook" } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "name": "screen_test", - "userId": "identified user id", - "type": "screen", - "anonymousId": "anon-id-new", - "context": { - "traits": { "trait1": "new-val" }, - "ip": "14.5.67.21", - "library": { "name": "http" } - }, - "properties": { - "abc": "123", - "key": { "abc": 123 }, - "array": [{ "abc": 123 }, { "def": 123 }] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "destination": { - "DestinationDefinition": { "Config": { "cdkEnabled": true } }, - "Config": { - "zapUrl": "abcd.zap-hook", - "trackEventsToZap": [ - { "from": "def", "to": "def.zap-hook" }, - { "from": "ghi", "to": "ghi.zap-hook" } - ], - "pageScreenEventsToZap": [ - { "from": "page_test", "to": "page.zap-hook" }, - { "from": "screen_test", "to": "screen.zap-hook" } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "event": "def", - "userId": "identified user id", - "type": "track", - "anonymousId": "anon-id-new", - "context": { - "traits": { "trait1": "new-val" }, - "ip": "14.5.67.21", - "library": { "name": "http" } - }, - "properties": { - "abc": "123", - "key": { "abc": 123 }, - "array": [{ "abc": 123 }, { "def": 123 }] - }, - "timestamp": "2020-02-02T00:23:09.544Z", - "originalTimestamp": "2020-04-17T14:42:44.724Z", - "sentAt": "2020-04-17T14:42:44.724Z" - }, - "destination": { - "DestinationDefinition": { "Config": { "cdkEnabled": true } }, - "Config": { - "zapUrl": "abcd.zap-hook", - "trackEventsToZap": [ - { "from": "def", "to": "def.zap-hook" }, - { "from": "def", "to": "ghi.zap-hook" } - ], - "pageScreenEventsToZap": [{}] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } -] diff --git a/test/__tests__/dcm_floodlight-cdk.test.ts b/test/__tests__/dcm_floodlight-cdk.test.ts deleted file mode 100644 index 373117ca1b..0000000000 --- a/test/__tests__/dcm_floodlight-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 = 'dcm_floodlight'; -const destName = 'DCM Floodlight'; - -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__/dcm_floodlight.test.js b/test/__tests__/dcm_floodlight.test.js deleted file mode 100644 index 85ece5aa42..0000000000 --- a/test/__tests__/dcm_floodlight.test.js +++ /dev/null @@ -1,6 +0,0 @@ -const { - getDestFromTestFile, - executeTransformationTest -} = require("./utilities/test-utils"); - -executeTransformationTest(getDestFromTestFile(__filename), "processor"); diff --git a/test/__tests__/dynamic_yield-cdk.test.ts b/test/__tests__/dynamic_yield-cdk.test.ts deleted file mode 100644 index 525603fd48..0000000000 --- a/test/__tests__/dynamic_yield-cdk.test.ts +++ /dev/null @@ -1,32 +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 = 'dynamic_yield'; -const destName = 'Dynamic Yield'; - -// Processor Test files -const testDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}.json`), { - encoding: 'utf8', -}); -const testData = JSON.parse(testDataFile); - -describe(`${destName} Tests`, () => { - describe('Processor Tests', () => { - testData.forEach((dataPoint, index) => { - it(`${destName} - payload: ${index}`, async () => { - try { - const output = await processCdkV2Workflow( - integration, - dataPoint.input, - tags.FEATURES.PROCESSOR, - ); - expect(output).toEqual(dataPoint.output); - } catch (error: any) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); -}); diff --git a/test/__tests__/eloqua-cdk.test.ts b/test/__tests__/eloqua-cdk.test.ts deleted file mode 100644 index 455e738b26..0000000000 --- a/test/__tests__/eloqua-cdk.test.ts +++ /dev/null @@ -1,35 +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 = 'eloqua'; -const destName = 'Eloqua'; - -// Processor Test files -const processorTestDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}.json`), - { - encoding: 'utf8', - }, -); -const processorTestData = JSON.parse(processorTestDataFile); - -describe(`${destName} Tests`, () => { - describe('Processor Tests', () => { - processorTestData.forEach((dataPoint, index) => { - it(`${destName} processor payload: ${index}`, async () => { - try { - const output = await processCdkV2Workflow( - integration, - dataPoint.input, - tags.FEATURES.PROCESSOR, - ); - expect(output).toEqual(dataPoint.output); - } catch (error: any) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); -}); diff --git a/test/__tests__/fullstory-cdk.test.ts b/test/__tests__/fullstory-cdk.test.ts deleted file mode 100644 index f7e0491aac..0000000000 --- a/test/__tests__/fullstory-cdk.test.ts +++ /dev/null @@ -1,32 +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 = 'fullstory'; -const destName = 'Fullstory'; - -// Processor Test files -const testDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}.json`), { - encoding: 'utf8', -}); -const testData = JSON.parse(testDataFile); - -describe(`${destName} Tests`, () => { - describe('Processor Tests', () => { - testData.forEach((dataPoint, index) => { - it(`${destName} - payload: ${index}`, async () => { - try { - const output = await processCdkV2Workflow( - integration, - dataPoint.input, - tags.FEATURES.PROCESSOR, - ); - expect(output).toEqual(dataPoint.output); - } catch (error: any) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); -}); diff --git a/test/__tests__/kochava-cdk.test.ts b/test/__tests__/kochava-cdk.test.ts deleted file mode 100644 index f87bca5828..0000000000 --- a/test/__tests__/kochava-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 = 'kochava'; -const destName = 'Kochava'; - -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__/kochava.test.js b/test/__tests__/kochava.test.js deleted file mode 100644 index 85ece5aa42..0000000000 --- a/test/__tests__/kochava.test.js +++ /dev/null @@ -1,6 +0,0 @@ -const { - getDestFromTestFile, - executeTransformationTest -} = require("./utilities/test-utils"); - -executeTransformationTest(getDestFromTestFile(__filename), "processor"); diff --git a/test/__tests__/lambda.test.js b/test/__tests__/lambda.test.js deleted file mode 100644 index 9fd656b103..0000000000 --- a/test/__tests__/lambda.test.js +++ /dev/null @@ -1,46 +0,0 @@ -const integration = "lambda"; -const name = "lambda"; - -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 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); - }); - }); -}); diff --git a/test/__tests__/launchdarkly_audience-cdk.test.ts b/test/__tests__/launchdarkly_audience-cdk.test.ts deleted file mode 100644 index 419b59fbd1..0000000000 --- a/test/__tests__/launchdarkly_audience-cdk.test.ts +++ /dev/null @@ -1,42 +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 = 'launchdarkly_audience'; -const destName = 'LaunchDarkly Audience'; - -// Processor Test files -const testDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}.json`), { - encoding: 'utf8', -}); -const testData = JSON.parse(testDataFile); - -jest.mock(`../../src/cdk/v2/destinations/launchdarkly_audience/config`, () => { - const originalConfig = jest.requireActual( - `../../src/cdk/v2/destinations/launchdarkly_audience/config`, - ); - return { - ...originalConfig, - MAX_IDENTIFIERS: 2, - }; -}); - -describe(`${destName} Tests`, () => { - describe('Processor Tests', () => { - testData.forEach((dataPoint, index) => { - it(`${destName} - payload: ${index}`, async () => { - try { - const output = await processCdkV2Workflow( - integration, - dataPoint.input, - tags.FEATURES.PROCESSOR, - ); - expect(output).toEqual(dataPoint.output); - } catch (error: any) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); -}); diff --git a/test/__tests__/leanplum.test.js b/test/__tests__/leanplum.test.js deleted file mode 100644 index eb55df54fe..0000000000 --- a/test/__tests__/leanplum.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const integration = "leanplum"; -const name = "LeanPlum"; - -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__/lemniskMarketingAutomation.test.js b/test/__tests__/lemniskMarketingAutomation.test.js deleted file mode 100644 index 55c09ba63e..0000000000 --- a/test/__tests__/lemniskMarketingAutomation.test.js +++ /dev/null @@ -1,44 +0,0 @@ -const integration = "lemnisk"; -const name = "lemniskMarketingAutomation"; -const version = "v0"; - -const fs = require("fs"); -const path = require("path"); - -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 routerTestDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_router.json`) -); -const routerTestData = JSON.parse(routerTestDataFile); - -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", () => { - routerTestData.forEach(dataPoint => { - it("Payload", async () => { - const output = await transformer.processRouterDest(dataPoint.input); - expect(output).toEqual(dataPoint.output); - }); - }); - }); -}); diff --git a/test/__tests__/lytics-cdk.test.ts b/test/__tests__/lytics-cdk.test.ts deleted file mode 100644 index f218fa27ea..0000000000 --- a/test/__tests__/lytics-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 = 'lytics'; -const destName = 'Lytics'; - -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__/lytics.test.js b/test/__tests__/lytics.test.js deleted file mode 100644 index d2b226aea3..0000000000 --- a/test/__tests__/lytics.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__/mailjet.test.js b/test/__tests__/mailjet.test.js deleted file mode 100644 index a732b9ca82..0000000000 --- a/test/__tests__/mailjet.test.js +++ /dev/null @@ -1,57 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const integration = "mailjet"; -const name = "mailjet"; -const version = "v0"; - -const transformer = require(`../../src/${version}/destinations/${integration}/transform`); - -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); - -const batchDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_batch.json`) -); -const batchData = JSON.parse(batchDataFile); - -describe(`${name} Tests`, () => { - describe("Processor", () => { - testData.forEach((dataPoint, index) => { - it(`${index}. ${integration} - ${dataPoint.description}`, () => { - try { - const output = 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", () => { - const output = transformer.processRouterDest(dataPoint.input); - expect(output).toEqual(dataPoint.output); - }); - }); - }); - - describe("Batching", () => { - batchData.forEach((dataPoint, index) => { - it(`${index}. ${integration} - ${dataPoint.description}`, () => { - const output = transformer.processRouterDest(dataPoint.input); - expect(output).toEqual(dataPoint.output); - }); - }); - }); -}); diff --git a/test/__tests__/mailjet_source.test.js b/test/__tests__/mailjet_source.test.js index 9081d21122..7a778e7b4e 100644 --- a/test/__tests__/mailjet_source.test.js +++ b/test/__tests__/mailjet_source.test.js @@ -18,7 +18,7 @@ testData.forEach((data, index) => { it(`${name} Tests: payload: ${index}`, () => { try { const output = transformer.process(data.input); - expect(output).toEqual(data.output.Message); + expect(output).toEqual(data.output); } catch (error) { expect(error.message).toEqual(data.output); } diff --git a/test/__tests__/mailmodo.test.js b/test/__tests__/mailmodo.test.js deleted file mode 100644 index d49049f5db..0000000000 --- a/test/__tests__/mailmodo.test.js +++ /dev/null @@ -1,52 +0,0 @@ -const integration = "mailmodo"; -const name = "Mailmodo"; - -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 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}`, () => { - try { - const output = transformer.process(dataPoint.input); - expect(output).toEqual(dataPoint.output); - } catch (error) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); - describe("Router", () => { - it("Payload", async () => { - try { - const routerOutput = await transformer.processRouterDest( - inputRouterData - ); - expect(routerOutput).toEqual(expectedRouterData); - } catch (error) { - expect(error.message).toEqual(expectedRouterData.error); - } - }); - }); -}); diff --git a/test/__tests__/moengage.test.js b/test/__tests__/moengage.test.js deleted file mode 100644 index 6f9ad38afc..0000000000 --- a/test/__tests__/moengage.test.js +++ /dev/null @@ -1,48 +0,0 @@ -const integration = "moengage"; -const name = "Moengage"; - -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__/monetate.test.js b/test/__tests__/monetate.test.js deleted file mode 100644 index 2b5c39db64..0000000000 --- a/test/__tests__/monetate.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const integration = "monetate"; -const name = "Monetate"; - -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__/new_relic-cdk.test.ts b/test/__tests__/new_relic-cdk.test.ts deleted file mode 100644 index 79b38ecf70..0000000000 --- a/test/__tests__/new_relic-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 = 'new_relic'; -const destName = 'New Relic'; - -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__/new_relic.test.js b/test/__tests__/new_relic.test.js deleted file mode 100644 index 85ece5aa42..0000000000 --- a/test/__tests__/new_relic.test.js +++ /dev/null @@ -1,6 +0,0 @@ -const { - getDestFromTestFile, - executeTransformationTest -} = require("./utilities/test-utils"); - -executeTransformationTest(getDestFromTestFile(__filename), "processor"); diff --git a/test/__tests__/ometria.test.js b/test/__tests__/ometria.test.js deleted file mode 100644 index 6d397c5ee4..0000000000 --- a/test/__tests__/ometria.test.js +++ /dev/null @@ -1,52 +0,0 @@ -const path = require("path"); -const fs = require("fs"); - -const integration = "ometria"; -const name = "Ometria"; - -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; - expected = expectedData[index].message; - } - //console.log(output.body); - expect(output).toEqual(expected); - }); -}); - -const batchInputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_batch_input.json`) -); -const batchOutputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_batch_output.json`) -); - -const batchInputData = JSON.parse(batchInputDataFile); -const batchExpectedData = JSON.parse(batchOutputDataFile); - -test("Batching", async () => { - const batchInputData = JSON.parse(batchInputDataFile); - const batchExpectedData = JSON.parse(batchOutputDataFile); - const output = await transformer.processRouterDest(batchInputData); - // console.log(JSON.stringify(batchInputData)); - // console.log(JSON.stringify(output)); - expect(Array.isArray(output)).toEqual(true); - expect(output).toEqual(batchExpectedData); -}); diff --git a/test/__tests__/one_signal.test.js b/test/__tests__/one_signal.test.js deleted file mode 100644 index 393d3c7657..0000000000 --- a/test/__tests__/one_signal.test.js +++ /dev/null @@ -1,46 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const integration = "one_signal"; -const name = "OneSignal"; -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); - }); - }); -}); diff --git a/test/__tests__/pagerduty.test.js b/test/__tests__/pagerduty.test.js deleted file mode 100644 index b5bd4cf4b3..0000000000 --- a/test/__tests__/pagerduty.test.js +++ /dev/null @@ -1,43 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const integration = "pagerduty"; -const name = "PagerDuty"; -const version = "v0"; - -const transformer = require(`../../src/${version}/destinations/${integration}/transform`); - -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((dataPoint, index) => { - it(`${index}. ${integration} - ${dataPoint.description}`, () => { - try { - const output = 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__/personalize.test.js b/test/__tests__/personalize.test.js deleted file mode 100644 index b46dc7df4e..0000000000 --- a/test/__tests__/personalize.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const integration = "personalize"; -const name = "Personalize"; - -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} - payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].error); - } - }); -}); diff --git a/test/__tests__/pinterestConversion.test.js b/test/__tests__/pinterestConversion.test.js index 351551753d..4c145f0383 100644 --- a/test/__tests__/pinterestConversion.test.js +++ b/test/__tests__/pinterestConversion.test.js @@ -7,6 +7,8 @@ const path = require("path"); const version = "v0"; const transformer = require(`../../src/${version}/destinations/${integration}/transform`); +const { assertRouterOutput } = require('../testHelper'); + const inputDataFile = fs.readFileSync( path.resolve(__dirname, `./data/${integration}_input.json`) ); @@ -44,6 +46,7 @@ describe(`${name} Tests`, () => { inputRouterData.forEach((input, index) => { it(`Payload: ${index}`, async () => { let output = await transformer.processRouterDest(input); + assertRouterOutput(output, input); expect(output).toEqual(expectedRouterData[index]); }); }); diff --git a/test/__tests__/rockerbox.test.js b/test/__tests__/rockerbox.test.js deleted file mode 100644 index 092b4b2806..0000000000 --- a/test/__tests__/rockerbox.test.js +++ /dev/null @@ -1,45 +0,0 @@ -const integration = "rockerbox"; -const name = "rockerbox"; - -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 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}`, () => { - try { - const output = 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); - }); - }); -}); diff --git a/test/__tests__/sendgrid.test.js b/test/__tests__/sendgrid.test.js deleted file mode 100644 index 20b0ebc5ae..0000000000 --- a/test/__tests__/sendgrid.test.js +++ /dev/null @@ -1,58 +0,0 @@ -const fs = require("fs"); -const path = require("path"); - -const integration = "sendgrid"; -const name = "SendGrid"; -const version = "v0"; - -const transformer = require(`../../src/${version}/destinations/${integration}/transform`); - -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); - -// Batch test files -const batchDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_batch.json`) -); -const batchData = JSON.parse(batchDataFile); - -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", () => { - routerTestData.forEach(dataPoint => { - it("SendGrid router test case", async () => { - const output = await transformer.processRouterDest(dataPoint.input); - expect(output).toEqual(dataPoint.output); - }); - }); - }); - - describe("Batching", () => { - batchData.forEach((dataPoint, index) => { - it(`${index}. ${integration} - ${dataPoint.description}`, async () => { - const output = await transformer.processRouterDest(dataPoint.input); - expect(output).toEqual(dataPoint.output); - }); - }); - }); -}); diff --git a/test/__tests__/sfmc.test.js b/test/__tests__/sfmc.test.js deleted file mode 100644 index 69d67625b1..0000000000 --- a/test/__tests__/sfmc.test.js +++ /dev/null @@ -1,49 +0,0 @@ -jest.mock("axios"); -const integration = "sfmc"; -const name = "Salesforce Marketing Cloud"; -const version = "v0"; - -const fs = require("fs"); -const path = require("path"); - -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__/userlist-cdk.test.ts b/test/__tests__/userlist-cdk.test.ts deleted file mode 100644 index 6c8dcc257f..0000000000 --- a/test/__tests__/userlist-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 = 'userlist'; -const destName = 'Userlist'; - -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__/userlist.test.js b/test/__tests__/userlist.test.js deleted file mode 100644 index d2b226aea3..0000000000 --- a/test/__tests__/userlist.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__/utilities/test-utils.js b/test/__tests__/utilities/test-utils.js index 73353f1ded..4d5d7fc909 100644 --- a/test/__tests__/utilities/test-utils.js +++ b/test/__tests__/utilities/test-utils.js @@ -2,6 +2,7 @@ const fs = require("fs"); const _ = require("lodash"); const path = require("path"); const { ConfigFactory, Executor } = require("rudder-transformer-cdk"); +const { assertRouterOutput } = require('../../testHelper'); // TODO: separate this out later as the list grows const cdkEnabledDestinations = { @@ -95,7 +96,9 @@ function executeTransformationTest(dest, transformAt) { if (transformAt == "processor") { actualData = await transformer.process(tcInput); } else { - actualData = (await transformer.processRouterDest([tcInput]))[0]; + actual = await transformer.processRouterDest([tcInput]) + assertRouterOutput(actual, [tcInput]); + actualData = (actual)[0]; } } // Compare actual and expected data @@ -115,6 +118,7 @@ function executeTransformationTest(dest, transformAt) { const version = "v0"; const transformer = require(`../../../src/${version}/destinations/${dest}/transform`); actualData = await transformer.processRouterDest(commonInput); + assertRouterOutput(actualData, commonInput); const cloneActual = _.cloneDeep(actualData); cloneActual[0].statTags = "undefined"; // Compare actual and expected data diff --git a/test/__tests__/vitally-cdk.test.ts b/test/__tests__/vitally-cdk.test.ts deleted file mode 100644 index 851461b4ab..0000000000 --- a/test/__tests__/vitally-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 = 'vitally'; -const destName = 'Vitally'; - -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__/vitally.test.js b/test/__tests__/vitally.test.js deleted file mode 100644 index 88ccc9a964..0000000000 --- a/test/__tests__/vitally.test.js +++ /dev/null @@ -1,6 +0,0 @@ -const { - getDestFromTestFile, - executeTransformationTest -} = require("./utilities/test-utils"); - -executeTransformationTest(getDestFromTestFile(__filename), "processor"); \ No newline at end of file diff --git a/test/__tests__/webhook-cdk.test.ts b/test/__tests__/webhook-cdk.test.ts deleted file mode 100644 index aa519f72cf..0000000000 --- a/test/__tests__/webhook-cdk.test.ts +++ /dev/null @@ -1,58 +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 = 'webhook'; -const destName = 'Webhook'; - -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) { - expect(error.message).toEqual(expected.message); - } - }); - }); - }); -}); diff --git a/test/__tests__/zapier-cdk.test.ts b/test/__tests__/zapier-cdk.test.ts deleted file mode 100644 index 33e71bd1f8..0000000000 --- a/test/__tests__/zapier-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 = 'zapier'; -const destName = 'Zapier'; - -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/deleteUsers/data/iterable/handler_input.json b/test/deleteUsers/data/iterable/handler_input.json deleted file mode 100644 index 8ebc859089..0000000000 --- a/test/deleteUsers/data/iterable/handler_input.json +++ /dev/null @@ -1,93 +0,0 @@ -[ - { - "request": { - "body": [ - { - "destType": "ITERABLE", - "userAttributes": [ - { - "userId": "rudder1" - } - ] - } - ] - } - }, - { - "request": { - "body": [ - { - "destType": "ITERABLE", - "userAttributes": [ - { - "userId": "rudder2" - } - ], - "config": { - "apiToken": "dummyApiKey" - } - } - ] - } - }, - { - "request": { - "body": [ - { - "destType": "ITERABLE", - "userAttributes": [ - { - "userId": "rudder1" - }, - { - "userId": "rudder2" - } - ], - "config": { - "apiKey": "dummyApiKey" - } - } - ] - } - }, - { - "request": { - "body": [ - { - "destType": "ITERABLE", - "userAttributes": [ - { - "userId": "rudder3" - }, - { - "userId": "rudder4" - } - ], - "config": { - "apiKey": "invalidKey" - } - } - ] - } - }, - { - "request": { - "body": [ - { - "destType": "ITERABLE", - "userAttributes": [ - { - "userId": "rudder5" - }, - { - "userId": "rudder6" - } - ], - "config": { - "apiKey": "dummyApiKey" - } - } - ] - } - } -] diff --git a/test/deleteUsers/data/iterable/handler_output.json b/test/deleteUsers/data/iterable/handler_output.json deleted file mode 100644 index b053d04df4..0000000000 --- a/test/deleteUsers/data/iterable/handler_output.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - [ - { - "statusCode": 400, - "error": "Config for deletion not present" - } - ], - [ - { - "statusCode": 400, - "error": "api key for deletion not present" - } - ], - [ - { - "statusCode": 400, - "error": "User deletion request failed for userIds : [{\"userId\":\"rudder2\",\"Reason\":\"User does not exist. Email: UserId: rudder2\"}]" - } - ], - [ - { - "error": "User deletion request failed : Invalid API key", - "statusCode": 401 - } - ], - [ - { - "statusCode": 200, - "status": "successful" - } - ] -] diff --git a/test/deleteUsers/data/iterable/nw_client_data.json b/test/deleteUsers/data/iterable/nw_client_data.json deleted file mode 100644 index 159c301b11..0000000000 --- a/test/deleteUsers/data/iterable/nw_client_data.json +++ /dev/null @@ -1,138 +0,0 @@ -[ - [ - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder1", - {}, - { - "Accept": "application/json", - "api_key": "dummyApiKey" - } - ], - "response": { - "response": { - "data": { - "msg": "All users associated with rudder1 were successfully deleted", - "code": "Success", - "params": null - }, - "status": 200 - } - } - }, - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder2", - {}, - { - "Accept": "application/json", - "api_key": "dummyApiKey" - } - ], - "response": { - "response": { - "data": { - "msg": "User does not exist. Email: UserId: rudder2", - "code": "BadParams", - "params": null - }, - "status": 400 - } - } - } - ], - [ - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder3", - {}, - { - "Accept": "application/json", - "api_key": "invalidKey" - } - ], - "response": { - "response": { - "data": { - "msg": "Invalid API key", - "code": "Success", - "params": { - "endpoint": "/api/users/byUserId/rudder3" - } - }, - "status": 401 - } - } - }, - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder4", - {}, - { - "Accept": "application/json", - "api_key": "invalidKey" - } - ], - "response": { - "response": { - "data": { - "msg": "Invalid API key", - "code": "Success", - "params": { - "endpoint": "/api/users/byUserId/rudder3" - } - }, - "status": 401 - } - } - } - ], - [ - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder5", - {}, - { - "Accept": "application/json", - "api_key": "dummyApiKey" - } - ], - "response": { - "response": { - "data": { - "msg": "All users associated with rudder5 were successfully deleted", - "code": "Success", - "params": null - }, - "status": 200 - } - } - }, - { - "type": "delete", - "reqParams": [ - "https://api.iterable.com/api/users/byUserId/rudder6", - {}, - { - "Accept": "application/json", - "api_key": "dummyApiKey" - } - ], - "response": { - "response": { - "data": { - "msg": "All users associated with rudder6 were successfully deleted", - "code": "Success", - "params": null - }, - "status": 200 - } - } - } - ] -] diff --git a/test/integrations/component.test.ts b/test/integrations/component.test.ts index 847dd4c91f..ec4fb02dc1 100644 --- a/test/integrations/component.test.ts +++ b/test/integrations/component.test.ts @@ -20,7 +20,9 @@ import { import tags from '../../src/v0/util/tags'; import { Server } from 'http'; import { appendFileSync } from 'fs'; -import { responses } from '../testHelper'; +import { assertRouterOutput, responses } from '../testHelper'; +import { generateTestReport, initaliseReport } from '../test_reporter/reporter'; +import _ from 'lodash'; // To run single destination test cases // npm run test:ts -- component --destination=adobe_analytics @@ -37,6 +39,7 @@ command .option('-f, --feature ', 'Enter Feature Name(processor, router)') .option('-i, --index ', 'Enter Test index') .option('-g, --generate ', 'Enter "true" If you want to generate network file') + .option('-id, --id ', 'Enter unique "Id" of the test case you want to run') .parse(); const opts = command.opts(); @@ -50,7 +53,10 @@ if (opts.generate === 'true') { let server: Server; +const REPORT_COMPATIBLE_INTEGRATION = ['klaviyo']; + beforeAll(async () => { + initaliseReport(); const app = new Koa(); app.use( bodyParser({ @@ -122,8 +128,35 @@ const testRoute = async (route, tcData: TestCaseData) => { .query(params || {}) .send(body); const outputResp = tcData.output.response || ({} as any); + + if (tcData.feature === tags.FEATURES.BATCH || tcData.feature === tags.FEATURES.ROUTER) { + //TODO get rid of these skipped destinations after they are fixed + if ( + tcData.name != 'marketo_static_list' && + tcData.name != 'mailmodo' && + tcData.name != 'hs' && + tcData.name != 'iterable' && + tcData.name != 'klaviyo' && + tcData.name != 'tiktok_ads' && + tcData.name != 'mailjet' && + tcData.name != 'google_adwords_offline_conversions' + ) { + assertRouterOutput(response.body.output, tcData.input.request.body.input); + } + } + expect(response.status).toEqual(outputResp.status); + if (REPORT_COMPATIBLE_INTEGRATION.includes(tcData.name?.toLocaleLowerCase())) { + const bodyMatched = _.isEqual(response.body, outputResp.body); + const statusMatched = response.status === outputResp.status; + if (bodyMatched && statusMatched) { + generateTestReport(tcData, response.body, 'passed'); + } else { + generateTestReport(tcData, response.body, 'failed'); + } + } + if (outputResp?.body) { expect(response.body).toEqual(outputResp.body); } @@ -181,6 +214,14 @@ describe.each(allTestDataFilePaths)('%s Tests', (testDataPath) => { if (opts.index !== undefined) { testData = [testData[parseInt(opts.index)]]; } + if (opts.id) { + testData = testData.filter((data) => { + if (data['id'] === opts.id) { + return true; + } + return false; + }); + } describe(`${testData[0].name} ${testData[0].module}`, () => { test.each(testData)('$feature -> $description', async (tcData) => { tcData?.mockFns?.(mockAdapter); diff --git a/test/integrations/destinations/active_campaign/router/data.ts b/test/integrations/destinations/active_campaign/router/data.ts index 782d1e3379..f65a65d9bc 100644 --- a/test/integrations/destinations/active_campaign/router/data.ts +++ b/test/integrations/destinations/active_campaign/router/data.ts @@ -18,9 +18,7 @@ export const data = [ eventKey: 'f8a866fddc721350fdc2fbbd2e5c43a6dddaaa03', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { channel: 'web', context: { @@ -30,21 +28,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -66,18 +56,9 @@ export const data = [ Random: 'random', }, lists: [ - { - id: 2, - status: 'subscribe', - }, - { - id: 3, - status: 'unsubscribe', - }, - { - id: 3, - status: 'unsubscribexyz', - }, + { id: 2, status: 'subscribe' }, + { id: 3, status: 'unsubscribe' }, + { id: 3, status: 'unsubscribexyz' }, ], address: { city: 'kolkata', @@ -87,9 +68,7 @@ export const data = [ street: '', }, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -117,22 +96,10 @@ export const data = [ lastName: 'Doe', phone: '92374162212', fieldValues: [ - { - field: '0', - value: 'Trastkiv', - }, - { - field: '1', - value: 'Russia', - }, - { - field: '3', - value: '||Potato||Onion||', - }, - { - field: '4', - value: 'random', - }, + { field: '0', value: 'Trastkiv' }, + { field: '1', value: 'Russia' }, + { field: '3', value: '||Potato||Onion||' }, + { field: '4', value: 'random' }, ], }, }, @@ -141,18 +108,11 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - 'Api-Token': 'dummyApiToken', - 'Content-Type': 'application/json', - }, + headers: { 'Api-Token': 'dummyApiToken', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://active.campaigns.rudder.com/api/3/contact/sync', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -188,9 +148,7 @@ export const data = [ eventKey: 'f8a866fddc721350fdc2fbbd2e5c43a6dddaaa03', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { channel: 'web', context: { @@ -200,24 +158,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'jamesDoe@gmail.com', - anonymousId: '12345', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + traits: { email: 'jamesDoe@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', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, request_ip: '1.1.1.1', type: 'page', @@ -234,9 +181,7 @@ export const data = [ title: 'Test Page', url: 'https://www.rudderlabs.com', }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T11:15:53.296Z', }, }, @@ -257,28 +202,17 @@ export const data = [ XML: {}, FORM: {}, JSON_ARRAY: {}, - JSON: { - siteTrackingDomain: { - name: 'rudderlabs.com', - }, - }, + JSON: { siteTrackingDomain: { name: 'rudderlabs.com' } }, }, type: 'REST', files: {}, method: 'POST', params: {}, - headers: { - 'Api-Token': 'dummyApiToken', - 'Content-Type': 'application/json', - }, + headers: { 'Api-Token': 'dummyApiToken', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://active.campaigns.rudder.com/api/3/siteTrackingDomains', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -312,10 +246,7 @@ export const data = [ sentAt: '2023-01-10T22:31:10.954Z', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -342,10 +273,7 @@ export const data = [ innerHeight: 782, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.20.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '2.20.0' }, campaign: {}, sessionId: 1673389635049, userAgent: @@ -369,9 +297,7 @@ export const data = [ receivedAt: '2023-01-10T22:31:11.612Z', request_ip: '0.0.0.20', anonymousId: '878e8f5f-9b6c-4aef-b5d3-1b970a13f17a', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2023-01-10T22:31:10.943Z', }, destination: { @@ -382,9 +308,7 @@ export const data = [ eventKey: 'f8a866fddc721350fdc2fbbd2e5c43a6dddaaa03', }, }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, }, ], destType: 'active_campaign', @@ -408,11 +332,7 @@ export const data = [ module: 'destination', }, statusCode: 400, - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: false, destination: { Config: { diff --git a/test/integrations/destinations/adj/router/data.ts b/test/integrations/destinations/adj/router/data.ts index c662d7b557..22c4e899d2 100644 --- a/test/integrations/destinations/adj/router/data.ts +++ b/test/integrations/destinations/adj/router/data.ts @@ -30,57 +30,26 @@ export const data = [ type: 'Android', attTrackingStatus: 3, }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.6', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, locale: 'en-US', - network: { - bluetooth: false, - carrier: 'Android', - cellular: true, - wifi: true, - }, - os: { - name: 'Android', - version: '9', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { bluetooth: false, carrier: 'Android', cellular: true, wifi: true }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', - traits: { - anonymousId: '21e13f4bc7ceddad', - }, + traits: { anonymousId: '21e13f4bc7ceddad' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, event: 'First Investment', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-28T19:53:31.900Z', properties: { currency: 'EUR', key1: 'value1', key2: 'value2', - key3: { - k4: 'v4', - k5: { - k6: 'v6', - }, - }, - key5: [ - { - k: 'v1', - }, - { - k: 'v2', - }, - ], + key3: { k4: 'v4', k5: { k6: 'v6' } }, + key5: [{ k: 'v1' }, { k: 'v2' }], revenue: 20.37566, }, receivedAt: '2020-09-29T14:50:43.005+05:30', @@ -89,9 +58,7 @@ export const data = [ timestamp: '2020-09-29T14:50:29.907+05:30', type: 'track', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { ID: '1i3Em7GMU9xVEiDlZUN8c88BMS9', Name: 'ADJ', @@ -114,14 +81,8 @@ export const data = [ Config: { appToken: 'testAppToken', customMappings: [ - { - from: 'Application Installed', - to: '3fdmll', - }, - { - from: 'First Investment', - to: 'testEventToken', - }, + { from: 'Application Installed', to: '3fdmll' }, + { from: 'First Investment', to: 'testEventToken' }, ], environment: true, }, @@ -147,9 +108,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://s2s.adjust.com/event', - headers: { - Accept: '*/*', - }, + headers: { Accept: '*/*' }, params: { callback_params: '{"key1":"value1","key2":"value2","key3.k4":"v4","key3.k5.k6":"v6","key5[0].k":"v1","key5[1].k":"v2"}', @@ -165,20 +124,11 @@ export const data = [ event_token: 'testEventToken', environment: 'production', }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, userId: '21e13f4bc7ceddad', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -203,14 +153,8 @@ export const data = [ Config: { appToken: 'testAppToken', customMappings: [ - { - from: 'Application Installed', - to: '3fdmll', - }, - { - from: 'First Investment', - to: 'testEventToken', - }, + { from: 'Application Installed', to: '3fdmll' }, + { from: 'First Investment', to: 'testEventToken' }, ], environment: true, }, @@ -255,57 +199,26 @@ export const data = [ type: 'ios', attTrackingStatus: 3, }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.6', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, locale: 'en-US', - network: { - bluetooth: false, - carrier: 'Android', - cellular: true, - wifi: true, - }, - os: { - name: 'Android', - version: '9', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { bluetooth: false, carrier: 'Android', cellular: true, wifi: true }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', - traits: { - anonymousId: '21e13f4bc7ceddad', - }, + traits: { anonymousId: '21e13f4bc7ceddad' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, event: 'First Investment', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-28T19:53:31.900Z', properties: { currency: 'EUR', key1: 'value1', key2: 'value2', - key3: { - k4: 'v4', - k5: { - k6: 'v6', - }, - }, - key5: [ - { - k: 'v1', - }, - { - k: 'v2', - }, - ], + key3: { k4: 'v4', k5: { k6: 'v6' } }, + key5: [{ k: 'v1' }, { k: 'v2' }], revenue: 20.37566, }, receivedAt: '2020-09-29T14:50:43.005+05:30', @@ -314,9 +227,7 @@ export const data = [ timestamp: '2020-09-29T14:50:29.907+05:30', type: 'track', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { ID: '1i3Em7GMU9xVEiDlZUN8c88BMS9', Name: 'ADJ', @@ -339,14 +250,8 @@ export const data = [ Config: { appToken: 'testAppToken', customMappings: [ - { - from: 'Application Installed', - to: '3fdmll', - }, - { - from: 'First Investment', - to: 'testEventToken', - }, + { from: 'Application Installed', to: '3fdmll' }, + { from: 'First Investment', to: 'testEventToken' }, ], environment: true, }, @@ -372,9 +277,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://s2s.adjust.com/event', - headers: { - Accept: '*/*', - }, + headers: { Accept: '*/*' }, params: { callback_params: '{"key1":"value1","key2":"value2","key3.k4":"v4","key3.k5.k6":"v6","key5[0].k":"v1","key5[1].k":"v2"}', @@ -390,20 +293,11 @@ export const data = [ event_token: 'testEventToken', environment: 'production', }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, userId: '21e13f4bc7ceddad', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -428,14 +322,8 @@ export const data = [ Config: { appToken: 'testAppToken', customMappings: [ - { - from: 'Application Installed', - to: '3fdmll', - }, - { - from: 'First Investment', - to: 'testEventToken', - }, + { from: 'Application Installed', to: '3fdmll' }, + { from: 'First Investment', to: 'testEventToken' }, ], environment: true, }, diff --git a/test/integrations/destinations/af/router/data.ts b/test/integrations/destinations/af/router/data.ts index 46f30fef81..b6dca3a75e 100644 --- a/test/integrations/destinations/af/router/data.ts +++ b/test/integrations/destinations/af/router/data.ts @@ -43,7 +43,7 @@ export const data = [ sentAt: '2019-10-14T11:15:53.296Z', integrations: { AF: { af_uid: 'afUid' } }, }, - metadata: { jobId: 2 }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { devKey: 'ef1d42390426e3f7c90ac78272e74344', @@ -85,7 +85,7 @@ export const data = [ sentAt: '2019-10-14T11:15:53.296Z', integrations: { AF: { af_uid: 'afUid' } }, }, - metadata: { jobId: 2 }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { devKey: 'ef1d42390426e3f7c90ac78272e74344', @@ -128,7 +128,7 @@ export const data = [ sentAt: '2019-10-14T11:15:53.296Z', integrations: { AF: { af_uid: 'afUid' } }, }, - metadata: { jobId: 2 }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { devKey: 'ef1d42390426e3f7c90ac78272e74344', @@ -177,7 +177,7 @@ export const data = [ }, files: {}, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -217,7 +217,7 @@ export const data = [ }, files: {}, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -257,7 +257,7 @@ export const data = [ }, files: {}, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/airship/router/data.ts b/test/integrations/destinations/airship/router/data.ts index bc11bc2cfc..8ed6f57a42 100644 --- a/test/integrations/destinations/airship/router/data.ts +++ b/test/integrations/destinations/airship/router/data.ts @@ -11,15 +11,9 @@ export const data = [ input: [ { destination: { - Config: { - apiKey: 'dummyApiKey', - appKey: 'O2YARRI15I', - dataCenter: false, - }, - }, - metadata: { - jobId: 1, + Config: { apiKey: 'dummyApiKey', appKey: 'O2YARRI15I', dataCenter: false }, }, + metadata: { jobId: 1, userId: 'u1' }, message: { channel: 'web', context: { @@ -29,26 +23,14 @@ export const data = [ 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', - }, + 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'track', messageId: '84e26acc-56a5-4835-8233-591137fca468', @@ -62,28 +44,14 @@ export const data = [ 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', - }, + { 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', - }, - }, - integrations: { - All: true, + userLocation: { state: 'CO', zip: '80202' }, }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -114,9 +82,7 @@ export const data = [ body: { JSON: { occured: '2019-10-14T09:03:17.562Z', - user: { - named_user_id: 'testuserId1', - }, + user: { named_user_id: 'testuserId1' }, body: { name: 'product_clicked', properties: { @@ -124,24 +90,12 @@ export const data = [ 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', - }, + { 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', - }, + userLocation: { state: 'CO', zip: '80202' }, }, }, }, @@ -151,19 +105,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - appKey: 'O2YARRI15I', - dataCenter: false, - }, + Config: { apiKey: 'dummyApiKey', appKey: 'O2YARRI15I', dataCenter: false }, }, }, ], @@ -183,15 +129,9 @@ export const data = [ input: [ { destination: { - Config: { - apiKey: 'dummyApiKey', - appKey: 'O2YARRI15I', - dataCenter: false, - }, - }, - metadata: { - jobId: 2, + Config: { apiKey: 'dummyApiKey', appKey: 'O2YARRI15I', dataCenter: false }, }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: '507f191e810c19729de860ea', channel: 'browser', @@ -200,9 +140,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '022bb90c-bbac-11e4-8dfc-aa07a5b093db', receivedAt: '2015-02-23T22:28:55.387Z', sentAt: '2015-02-23T22:28:55.111Z', @@ -255,15 +193,9 @@ export const data = [ params: {}, body: { JSON: { - audience: { - named_user_id: '97980cfea0067', - }, - add: { - rudderstack_integration: ['firstname', 'favcolor'], - }, - remove: { - rudderstack_integration: ['lastname'], - }, + audience: { named_user_id: '97980cfea0067' }, + add: { rudderstack_integration: ['firstname', 'favcolor'] }, + remove: { rudderstack_integration: ['lastname'] }, }, JSON_ARRAY: {}, XML: {}, @@ -291,12 +223,7 @@ export const data = [ value: 'Peter Gibbons', timestamp: '2015-02-23T22:28:55Z', }, - { - action: 'set', - key: 'age', - value: 34, - timestamp: '2015-02-23T22:28:55Z', - }, + { action: 'set', key: 'age', value: 34, timestamp: '2015-02-23T22:28:55Z' }, { action: 'set', key: 'email', @@ -354,19 +281,11 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - appKey: 'O2YARRI15I', - dataCenter: false, - }, + Config: { apiKey: 'dummyApiKey', appKey: 'O2YARRI15I', dataCenter: false }, }, }, ], @@ -385,15 +304,8 @@ export const data = [ body: { input: [ { - destination: { - Config: { - apiKey: 'dummyApiKey', - dataCenter: false, - }, - }, - metadata: { - jobId: 3, - }, + destination: { Config: { apiKey: 'dummyApiKey', dataCenter: false } }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: '507f191e810c19729de860ea', channel: 'browser', @@ -402,9 +314,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '022bb90c-bbac-11e4-8dfc-aa07a5b093db', receivedAt: '2015-02-23T22:28:55.387Z', sentAt: '2015-02-23T22:28:55.111Z', @@ -457,15 +367,9 @@ export const data = [ params: {}, body: { JSON: { - audience: { - named_user_id: '97980cfea0067', - }, - add: { - rudderstack_integration_group: ['firstname', 'favcolor'], - }, - remove: { - rudderstack_integration_group: ['lastname'], - }, + audience: { named_user_id: '97980cfea0067' }, + add: { rudderstack_integration_group: ['firstname', 'favcolor'] }, + remove: { rudderstack_integration_group: ['lastname'] }, }, JSON_ARRAY: {}, XML: {}, @@ -493,12 +397,7 @@ export const data = [ value: 'Peter Gibbons', timestamp: '2015-02-23T22:28:55Z', }, - { - action: 'set', - key: 'age', - value: 34, - timestamp: '2015-02-23T22:28:55Z', - }, + { action: 'set', key: 'age', value: 34, timestamp: '2015-02-23T22:28:55Z' }, { action: 'set', key: 'email', @@ -556,19 +455,10 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'dummyApiKey', - dataCenter: false, - }, - }, + destination: { Config: { apiKey: 'dummyApiKey', dataCenter: false } }, }, ], }, diff --git a/test/integrations/destinations/algolia/router/data.ts b/test/integrations/destinations/algolia/router/data.ts index aaf3e224e3..65c74342dc 100644 --- a/test/integrations/destinations/algolia/router/data.ts +++ b/test/integrations/destinations/algolia/router/data.ts @@ -17,10 +17,7 @@ export const data = [ userId: 'test-user-id1', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -56,10 +53,7 @@ export const data = [ custom_date1: '2019-10-14T11:15:53.296Z', custom_flavor: 'chocolate', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.2.1', - }, + 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', @@ -71,27 +65,17 @@ export const data = [ index: 'products', queryId: '43b15df305339e827f0ac0bdc5ebcaa7', products: [ - { - objectId: 'ecommerce-sample-data-919', - position: 7, - }, - { - objectId: '9780439784542', - position: 8, - }, + { 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, - }, + integrations: { All: true }, originalTimestamp: '2021-10-25T09:40:08.879Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', Name: 'algolia-dev', @@ -100,9 +84,7 @@ export const data = [ Name: 'ALGOLIA', DisplayName: 'Algolia', Config: { - destConfig: { - defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'], - }, + destConfig: { defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'] }, excludeKeys: [], includeKeys: [], saveDestinationResponse: true, @@ -128,14 +110,8 @@ export const data = [ apiKey: 'apiKey', applicationId: 'appId', eventTypeSettings: [ - { - from: 'product clicked', - to: 'click', - }, - { - from: 'product list viewed', - to: 'view', - }, + { from: 'product clicked', to: 'click' }, + { from: 'product list viewed', to: 'view' }, ], }, Enabled: true, @@ -151,10 +127,7 @@ export const data = [ userId: 'test-user-id1', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -190,10 +163,7 @@ export const data = [ custom_date1: '2019-10-14T11:15:53.296Z', custom_flavor: 'chocolate', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.2.1', - }, + 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', @@ -201,21 +171,14 @@ export const data = [ 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'], - }, + 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, - }, + integrations: { All: true }, originalTimestamp: '2021-10-25T09:40:08.886Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', Name: 'algolia-dev', @@ -224,9 +187,7 @@ export const data = [ Name: 'ALGOLIA', DisplayName: 'Algolia', Config: { - destConfig: { - defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'], - }, + destConfig: { defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'] }, excludeKeys: [], includeKeys: [], saveDestinationResponse: true, @@ -252,14 +213,8 @@ export const data = [ apiKey: 'apiKey-2', applicationId: 'appId-2', eventTypeSettings: [ - { - from: 'product clicked', - to: 'click', - }, - { - from: 'product list viewed', - to: 'view', - }, + { from: 'product clicked', to: 'click' }, + { from: 'product list viewed', to: 'view' }, ], }, Enabled: true, @@ -277,26 +232,14 @@ export const data = [ 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', - }, + 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/ometria', referrer: '', @@ -315,27 +258,16 @@ export const data = [ anonymousId: '123456', event: 'product clicked', userId: 'testuserId1', - properties: { - filters: ['field1:hello', 'val1:val2'], - }, - integrations: { - All: true, - }, + properties: { filters: ['field1:hello', 'val1:val2'] }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { apiKey: 'dummyApiKey', applicationId: 'O2YARRI15I', - eventTypeSettings: [ - { - from: 'product clicked', - to: 'cLick ', - }, - ], + eventTypeSettings: [{ from: 'product clicked', to: 'cLick ' }], }, }, }, @@ -356,10 +288,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://insights.algolia.io/1/events', - headers: { - 'X-Algolia-Application-Id': 'appId', - 'X-Algolia-API-Key': 'apiKey', - }, + headers: { 'X-Algolia-Application-Id': 'appId', 'X-Algolia-API-Key': 'apiKey' }, params: {}, body: { JSON: { @@ -388,12 +317,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -405,9 +330,7 @@ export const data = [ Name: 'ALGOLIA', DisplayName: 'Algolia', Config: { - destConfig: { - defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'], - }, + destConfig: { defaultConfig: ['apiKey', 'applicationId', 'eventTypeSettings'] }, excludeKeys: [], includeKeys: [], saveDestinationResponse: true, @@ -433,14 +356,8 @@ export const data = [ apiKey: 'apiKey', applicationId: 'appId', eventTypeSettings: [ - { - from: 'product clicked', - to: 'click', - }, - { - from: 'product list viewed', - to: 'view', - }, + { from: 'product clicked', to: 'click' }, + { from: 'product list viewed', to: 'view' }, ], }, Enabled: true, @@ -454,20 +371,11 @@ export const data = [ Config: { apiKey: 'dummyApiKey', applicationId: 'O2YARRI15I', - eventTypeSettings: [ - { - from: 'product clicked', - to: 'cLick ', - }, - ], + eventTypeSettings: [{ from: 'product clicked', to: 'cLick ' }], }, }, error: 'Missing required value from "properties.index"', - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statTags: { destType: 'ALGOLIA', errorCategory: 'dataValidation', @@ -501,10 +409,7 @@ export const data = [ userId: 'anonymous', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', version: '2.35.0', @@ -529,14 +434,8 @@ export const data = [ innerWidth: 2514, innerHeight: 567, }, - traits: { - loggedIn: false, - customerId: 'anonymous', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.35.0', - }, + traits: { loggedIn: false, customerId: 'anonymous' }, + library: { name: 'RudderLabs JavaScript SDK', version: '2.35.0' }, campaign: {}, sessionId: 1687204412379, userAgent: @@ -2093,9 +1992,7 @@ export const data = [ receivedAt: '2023-06-19T22:22:32.431Z', request_ip: '104.205.211.60', anonymousId: '7b701174-5998-480e-a4df-b322d0ec9d1c', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2023-06-19T19:54:41.686Z', }, destination: { @@ -2104,35 +2001,17 @@ export const data = [ 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', - }, + { 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, - }, + liveEventsConfig: { eventDelivery: false, eventDeliveryTS: 1687213909459 }, id: 'destId', workspaceId: 'wspId', DestinationDefinition: { @@ -2192,6 +2071,7 @@ export const data = [ workspaceId: 'wspId', destinationId: 'destId', jobId: 12, + userId: 'u1', }, }, ], @@ -2247,10 +2127,7 @@ export const data = [ }, endpoint: 'https://insights.algolia.io/1/events', files: {}, - headers: { - 'X-Algolia-API-Key': 'apiKey', - 'X-Algolia-Application-Id': 'appId', - }, + headers: { 'X-Algolia-API-Key': 'apiKey', 'X-Algolia-Application-Id': 'appId' }, method: 'POST', params: {}, type: 'REST', @@ -2263,26 +2140,11 @@ export const data = [ 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', - }, + { 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: [], }, @@ -2333,10 +2195,7 @@ export const data = [ id: 'destId', isConnectionEnabled: true, isProcessorEnabled: true, - liveEventsConfig: { - eventDelivery: false, - eventDeliveryTS: 1687213909459, - }, + liveEventsConfig: { eventDelivery: false, eventDeliveryTS: 1687213909459 }, name: 'my_algolia', revisionId: 'revisionId1', secretConfig: {}, @@ -2351,6 +2210,7 @@ export const data = [ workspaceId: 'wspId', destinationId: 'destId', jobId: 12, + userId: 'u1', }, ], statusCode: 200, diff --git a/test/integrations/destinations/am/batch/data.ts b/test/integrations/destinations/am/batch/data.ts index 962bb476c4..aa67df06c7 100644 --- a/test/integrations/destinations/am/batch/data.ts +++ b/test/integrations/destinations/am/batch/data.ts @@ -62,6 +62,7 @@ export const data = [ }, metadata: { job_id: 1, + userId: 'u1', }, destination: { ID: 'a', @@ -82,8 +83,10 @@ export const data = [ { batched: false, error: 'Both userId and deviceId cannot be undefined', + //TODO fix this metadata: { job_id: 1, + userId: 'u1', }, statTags: { errorCategory: 'dataValidation', @@ -161,6 +164,7 @@ export const data = [ }, metadata: { job_id: 1, + userId: 'u1', }, destination: { ID: 'a', @@ -215,6 +219,7 @@ export const data = [ }, metadata: { job_id: 2, + userId: 'u1', }, destination: { ID: 'a', @@ -269,6 +274,7 @@ export const data = [ }, metadata: { job_id: 3, + userId: 'u1', }, destination: { ID: 'a', @@ -326,6 +332,7 @@ export const data = [ }, metadata: { job_id: 4, + userId: 'u1', }, destination: { ID: 'a', @@ -383,6 +390,7 @@ export const data = [ }, metadata: { job_id: 5, + userId: 'u1', }, destination: { ID: 'a', @@ -416,6 +424,7 @@ export const data = [ }, metadata: { job_id: 6, + userId: 'u1', }, destination: { ID: 'a', @@ -447,6 +456,7 @@ export const data = [ }, metadata: { job_id: 7, + userId: 'u1', }, destination: { ID: 'a', @@ -520,6 +530,7 @@ export const data = [ metadata: [ { job_id: 1, + userId: 'u1', }, ], destination: { @@ -555,6 +566,7 @@ export const data = [ metadata: [ { job_id: 6, + userId: 'u1', }, ], destination: { @@ -588,6 +600,7 @@ export const data = [ metadata: [ { job_id: 7, + userId: 'u1', }, ], destination: { @@ -698,15 +711,19 @@ export const data = [ metadata: [ { job_id: 2, + userId: 'u1', }, { job_id: 3, + userId: 'u1', }, { job_id: 4, + userId: 'u1', }, { job_id: 5, + userId: 'u1', }, ], destination: { @@ -785,6 +802,7 @@ export const data = [ }, metadata: { job_id: 1, + userId: 'u1', }, destination: { ID: 'a', @@ -837,6 +855,7 @@ export const data = [ }, metadata: { job_id: 2, + userId: 'u1', }, destination: { ID: 'a', @@ -889,6 +908,7 @@ export const data = [ }, metadata: { job_id: 3, + userId: 'u1', }, destination: { ID: 'a', @@ -944,6 +964,7 @@ export const data = [ }, metadata: { job_id: 4, + userId: 'u1', }, destination: { ID: 'a', @@ -999,6 +1020,7 @@ export const data = [ }, metadata: { job_id: 5, + userId: 'u1', }, destination: { ID: 'a', @@ -1032,6 +1054,7 @@ export const data = [ }, metadata: { job_id: 6, + userId: 'u1', }, destination: { ID: 'a', @@ -1063,6 +1086,7 @@ export const data = [ }, metadata: { job_id: 7, + userId: 'u1', }, destination: { ID: 'a', @@ -1134,6 +1158,7 @@ export const data = [ metadata: [ { job_id: 1, + userId: 'u1', }, ], destination: { @@ -1169,6 +1194,7 @@ export const data = [ metadata: [ { job_id: 6, + userId: 'u1', }, ], destination: { @@ -1202,6 +1228,7 @@ export const data = [ metadata: [ { job_id: 7, + userId: 'u1', }, ], destination: { @@ -1312,15 +1339,19 @@ export const data = [ metadata: [ { job_id: 2, + userId: 'u1', }, { job_id: 3, + userId: 'u1', }, { job_id: 4, + userId: 'u1', }, { job_id: 5, + userId: 'u1', }, ], destination: { @@ -2087,6 +2118,7 @@ export const data = [ }, metadata: { job_id: 1, + userId: 'u1', }, destination: { ID: 'a', @@ -2141,6 +2173,7 @@ export const data = [ }, metadata: { job_id: 2, + userId: 'u1', }, destination: { ID: 'a', @@ -2195,6 +2228,7 @@ export const data = [ }, metadata: { job_id: 3, + userId: 'u1', }, destination: { ID: 'a', @@ -2252,6 +2286,7 @@ export const data = [ }, metadata: { job_id: 4, + userId: 'u1', }, destination: { ID: 'a', @@ -2309,6 +2344,7 @@ export const data = [ }, metadata: { job_id: 5, + userId: 'u1', }, destination: { ID: 'a', @@ -2342,6 +2378,7 @@ export const data = [ }, metadata: { job_id: 6, + userId: 'u1', }, destination: { ID: 'a', @@ -2373,6 +2410,7 @@ export const data = [ }, metadata: { job_id: 7, + userId: 'u1', }, destination: { ID: 'a', @@ -2446,6 +2484,7 @@ export const data = [ metadata: [ { job_id: 1, + userId: 'u1', }, ], destination: { @@ -2481,6 +2520,7 @@ export const data = [ metadata: [ { job_id: 6, + userId: 'u1', }, ], destination: { @@ -2514,6 +2554,7 @@ export const data = [ metadata: [ { job_id: 7, + userId: 'u1', }, ], destination: { @@ -2624,15 +2665,19 @@ export const data = [ metadata: [ { job_id: 2, + userId: 'u1', }, { job_id: 3, + userId: 'u1', }, { job_id: 4, + userId: 'u1', }, { job_id: 5, + userId: 'u1', }, ], destination: { @@ -2712,6 +2757,7 @@ export const data = [ }, metadata: { job_id: 1, + userId: 'u1', }, destination: { ID: 'a', @@ -2766,6 +2812,7 @@ export const data = [ }, metadata: { job_id: 2, + userId: 'u1', }, destination: { ID: 'a', @@ -2820,6 +2867,7 @@ export const data = [ }, metadata: { job_id: 3, + userId: 'u1', }, destination: { ID: 'a', @@ -2877,6 +2925,7 @@ export const data = [ }, metadata: { job_id: 4, + userId: 'u1', }, destination: { ID: 'a', @@ -2934,6 +2983,7 @@ export const data = [ }, metadata: { job_id: 5, + userId: 'u1', }, destination: { ID: 'a', @@ -2967,6 +3017,7 @@ export const data = [ }, metadata: { job_id: 6, + userId: 'u1', }, destination: { ID: 'a', @@ -2998,6 +3049,7 @@ export const data = [ }, metadata: { job_id: 7, + userId: 'u1', }, destination: { ID: 'a', @@ -3070,6 +3122,7 @@ export const data = [ metadata: [ { job_id: 1, + userId: 'u1', }, ], destination: { @@ -3105,6 +3158,7 @@ export const data = [ metadata: [ { job_id: 6, + userId: 'u1', }, ], destination: { @@ -3138,6 +3192,7 @@ export const data = [ metadata: [ { job_id: 7, + userId: 'u1', }, ], destination: { @@ -3248,15 +3303,19 @@ export const data = [ metadata: [ { job_id: 2, + userId: 'u1', }, { job_id: 3, + userId: 'u1', }, { job_id: 4, + userId: 'u1', }, { job_id: 5, + userId: 'u1', }, ], destination: { diff --git a/test/integrations/destinations/am/router/data.ts b/test/integrations/destinations/am/router/data.ts index 7f2e1d0329..1b4026c85e 100644 --- a/test/integrations/destinations/am/router/data.ts +++ b/test/integrations/destinations/am/router/data.ts @@ -32,21 +32,13 @@ export const data = [ ip: '0.0.0.0', age: 26, }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/amplitude', referrer: '', @@ -64,20 +56,12 @@ export const data = [ originalTimestamp: '2019-10-14T09:03:17.562Z', anonymousId: '123456', userId: '123456', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - apiKey: 'abcde', - groupTypeTrait: 'email', - groupValueTrait: 'age', - }, + Config: { apiKey: 'abcde', groupTypeTrait: 'email', groupValueTrait: 'age' }, }, }, { @@ -90,24 +74,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'test@rudderstack.com', - anonymousId: '12345', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + traits: { email: 'test@rudderstack.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', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/amplitude', referrer: '', @@ -136,20 +109,12 @@ export const data = [ initial_referrer: 'https://docs.rudderstack.com', initial_referring_domain: 'docs.rudderstack.com', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - apiKey: 'abcde', - }, - }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { Config: { apiKey: 'abcde' } }, }, ], destType: 'am', @@ -169,9 +134,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api2.amplitude.com/2/httpapi', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -208,9 +171,7 @@ export const data = [ ip: '0.0.0.0', }, ], - options: { - min_id_length: 1, - }, + options: { min_id_length: 1 }, }, XML: {}, JSON_ARRAY: {}, @@ -220,19 +181,11 @@ export const data = [ userId: '123456', }, ], - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'abcde', - groupTypeTrait: 'email', - groupValueTrait: 'age', - }, + Config: { apiKey: 'abcde', groupTypeTrait: 'email', groupValueTrait: 'age' }, }, }, { @@ -242,9 +195,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api2.amplitude.com/2/httpapi', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -285,9 +236,7 @@ export const data = [ time: 1571051718299, }, ], - options: { - min_id_length: 1, - }, + options: { min_id_length: 1 }, }, XML: {}, JSON_ARRAY: {}, @@ -297,18 +246,10 @@ export const data = [ userId: '00000000000000000000000000', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'abcde', - }, - }, + destination: { Config: { apiKey: 'abcde' } }, }, ], }, diff --git a/test/integrations/destinations/appcues/router/data.ts b/test/integrations/destinations/appcues/router/data.ts index ddc8dddf57..729aee7699 100644 --- a/test/integrations/destinations/appcues/router/data.ts +++ b/test/integrations/destinations/appcues/router/data.ts @@ -21,15 +21,9 @@ export const data = [ version: '1.1.9', }, campaign: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.9', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.9' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/rudder-sdk-js/tests/html/script-test.html', referrer: '', @@ -37,16 +31,12 @@ export const data = [ title: '', url: 'http://localhost:4321/rudder-sdk-js/tests/html/script-test.html', }, - screen: { - density: 2, - }, + 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, - }, + 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', @@ -57,15 +47,8 @@ export const data = [ type: 'identify', userId: 'onlyUserId', }, - metadata: { - jobId: 1, - }, - destination: { - Config: { - accountId: '86086', - useNativeSDK: false, - }, - }, + metadata: { jobId: 1, userId: 'u1' }, + destination: { Config: { accountId: '86086', useNativeSDK: false } }, }, { message: { @@ -79,15 +62,9 @@ export const data = [ version: '1.1.9', }, campaign: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.9', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.9' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/rudder-sdk-js/tests/html/script-test.html', referrer: '', @@ -95,19 +72,12 @@ export const data = [ title: '', url: 'http://localhost:4321/rudder-sdk-js/tests/html/script-test.html', }, - screen: { - density: 2, - }, - traits: { - 'first name': 'John', - 'last name': 'Abraham', - }, + 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, - }, + 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', @@ -118,15 +88,8 @@ export const data = [ type: 'identify', userId: 'userIdWithProperties', }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - accountId: '86086', - useNativeSDK: false, - }, - }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { Config: { accountId: '86086', useNativeSDK: false } }, }, ], destType: 'appcues', @@ -145,34 +108,20 @@ export const data = [ XML: {}, JSON_ARRAY: {}, FORM: {}, - JSON: { - request_id: '6a5f38c0-4e75-4268-a066-2b73fbcad01f', - profile_update: {}, - }, + JSON: { request_id: '6a5f38c0-4e75-4268-a066-2b73fbcad01f', profile_update: {} }, }, type: 'REST', files: {}, method: 'POST', params: {}, - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://api.appcues.com/v1/accounts/86086/users/onlyUserId/activity', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - accountId: '86086', - useNativeSDK: false, - }, - }, + destination: { Config: { accountId: '86086', useNativeSDK: false } }, }, { batchedRequest: { @@ -182,36 +131,22 @@ export const data = [ FORM: {}, JSON: { request_id: '57494c6a-3c62-4b30-83aa-6e821d37ac75', - profile_update: { - 'last name': 'Abraham', - 'first name': 'John', - }, + profile_update: { 'last name': 'Abraham', 'first name': 'John' }, }, }, type: 'REST', files: {}, method: 'POST', params: {}, - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://api.appcues.com/v1/accounts/86086/users/userIdWithProperties/activity', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - accountId: '86086', - useNativeSDK: false, - }, - }, + destination: { Config: { accountId: '86086', useNativeSDK: false } }, }, ], }, diff --git a/test/integrations/destinations/attentive_tag/router/data.ts b/test/integrations/destinations/attentive_tag/router/data.ts index c52a6ed2e3..63bd477f0c 100644 --- a/test/integrations/destinations/attentive_tag/router/data.ts +++ b/test/integrations/destinations/attentive_tag/router/data.ts @@ -10,28 +10,16 @@ export const data = [ body: { input: [ { - destination: { - Config: { - apiKey: 'dummyApiKey', - signUpSourceId: '241654', - }, - }, - metadata: { - jobId: 1, - }, + destination: { Config: { apiKey: 'dummyApiKey', signUpSourceId: '241654' } }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', channel: 'web', context: { locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, traits: { - company: { - id: 'abc123', - }, + company: { id: 'abc123' }, createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', email: 'test0@gmail.com', phone: '+16465453911', @@ -39,26 +27,14 @@ export const data = [ 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, - }, + { type: 'clientUsrId', id: 1 }, + { type: 'shopifyId', id: 1 }, + { type: 'klaviyoId', id: 1 }, ], }, integrations: { All: true, - attentive_tag: { - signUpSourceId: '241654', - identifyOperation: 'unsubscribe', - }, + attentive_tag: { signUpSourceId: '241654', identifyOperation: 'unsubscribe' }, }, messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', receivedAt: '2020-10-16T13:56:14.945+05:30', @@ -88,31 +64,17 @@ export const data = [ }, params: {}, body: { - JSON: { - user: { - phone: '+16465453911', - email: 'test0@gmail.com', - }, - }, + JSON: { user: { phone: '+16465453911', email: 'test0@gmail.com' } }, JSON_ARRAY: {}, XML: {}, FORM: {}, }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'dummyApiKey', - signUpSourceId: '241654', - }, - }, + destination: { Config: { apiKey: 'dummyApiKey', signUpSourceId: '241654' } }, }, ], }, diff --git a/test/integrations/destinations/autopilot/router/data.ts b/test/integrations/destinations/autopilot/router/data.ts index cbfe0c4207..92117a97c8 100644 --- a/test/integrations/destinations/autopilot/router/data.ts +++ b/test/integrations/destinations/autopilot/router/data.ts @@ -17,28 +17,18 @@ export const data = [ ID: '1afjX4MlAucK57Q0ctTVlD27Tvo', Name: 'AUTOPILOT', DisplayName: 'Autopilot', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { apiKey: 'dummyApiKey', - customMappings: [ - { - from: '0001', - to: 'Signup', - }, - ], + customMappings: [{ from: '0001', to: 'Signup' }], triggerId: '00XX', }, Enabled: true, Transformations: [], IsProcessorEnabled: true, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: 'ac7722c2-ccb6-4ae2-baf6-1effe861f4cd', channel: 'web', @@ -49,15 +39,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.1-rc.2', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.1-rc.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.1-rc.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/tests/html/index4.html', referrer: '', @@ -65,25 +49,17 @@ export const data = [ title: '', url: 'http://localhost/tests/html/index4.html', }, - screen: { - density: 2, - }, + 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, - }, + 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', - }, + traits: { age: 23, email: 'testmp@rudderstack.com', firstname: 'Test Kafka' }, timestamp: '2020-04-17T20:12:44.758+05:30', type: 'identify', userId: 'user12345', @@ -97,28 +73,18 @@ export const data = [ ID: '1afjX4MlAucK57Q0ctTVlD27Tvo', Name: 'AUTOPILOT', DisplayName: 'Autopilot', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { apiKey: 'dummyApiKey', - customMappings: [ - { - from: '0001', - to: 'Signup', - }, - ], + customMappings: [{ from: '0001', to: 'Signup' }], triggerId: '00XX', }, Enabled: true, Transformations: [], IsProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'ac7722c2-ccb6-4ae2-baf6-1effe861f4cd', channel: 'web', @@ -129,15 +95,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.1-rc.2', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.1-rc.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.1-rc.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/tests/html/index4.html', referrer: '', @@ -145,27 +105,16 @@ export const data = [ title: '', url: 'http://localhost/tests/html/index4.html', }, - screen: { - density: 2, - }, - traits: { - age: 23, - email: 'testmp@rudderstack.com', - firstname: 'Test Kafka', - }, + 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, - }, + 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, - }, + 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', @@ -202,9 +151,7 @@ export const data = [ contact: { Email: 'testmp@rudderstack.com', FirstName: 'Test Kafka', - custom: { - age: 23, - }, + custom: { age: 23 }, }, }, XML: {}, @@ -214,11 +161,7 @@ export const data = [ files: {}, userId: 'ac7722c2-ccb6-4ae2-baf6-1effe861f4cd', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -228,19 +171,11 @@ export const data = [ ID: '1afjX4MlAucK57Q0ctTVlD27Tvo', Name: 'AUTOPILOT', DisplayName: 'Autopilot', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { apiKey: 'dummyApiKey', - customMappings: [ - { - from: '0001', - to: 'Signup', - }, - ], + customMappings: [{ from: '0001', to: 'Signup' }], triggerId: '00XX', }, Enabled: true, @@ -262,12 +197,7 @@ export const data = [ }, params: {}, body: { - JSON: { - property: { - test_prop_1: 'test prop', - test_prop_2: 1232, - }, - }, + JSON: { property: { test_prop_1: 'test prop', test_prop_2: 1232 } }, XML: {}, JSON_ARRAY: {}, FORM: {}, @@ -275,11 +205,7 @@ export const data = [ files: {}, userId: 'ac7722c2-ccb6-4ae2-baf6-1effe861f4cd', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -289,19 +215,11 @@ export const data = [ ID: '1afjX4MlAucK57Q0ctTVlD27Tvo', Name: 'AUTOPILOT', DisplayName: 'Autopilot', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { apiKey: 'dummyApiKey', - customMappings: [ - { - from: '0001', - to: 'Signup', - }, - ], + customMappings: [{ from: '0001', to: 'Signup' }], triggerId: '00XX', }, Enabled: true, diff --git a/test/integrations/destinations/blueshift/router/data.ts b/test/integrations/destinations/blueshift/router/data.ts index 7c92ff1d74..7104beb873 100644 --- a/test/integrations/destinations/blueshift/router/data.ts +++ b/test/integrations/destinations/blueshift/router/data.ts @@ -17,9 +17,7 @@ export const data = [ datacenterEU: false, }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { context: { app: { @@ -51,9 +49,7 @@ export const data = [ datacenterEU: false, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { context: { ip: '14.5.67.21', @@ -67,16 +63,8 @@ export const data = [ type: 'Android', attTrackingStatus: 3, }, - os: { - name: 'Android', - version: '9', - }, - network: { - bluetooth: false, - carrier: 'Android', - cellular: true, - wifi: true, - }, + os: { name: 'Android', version: '9' }, + network: { bluetooth: false, carrier: 'Android', cellular: true, wifi: true }, address: { city: 'kolkata', country: 'India', @@ -87,9 +75,7 @@ export const data = [ street: 'rajnagar', }, }, - properties: { - cookie: '1234abcd-efghijkj-1234kfjadslk-34iu123', - }, + properties: { cookie: '1234abcd-efghijkj-1234kfjadslk-34iu123' }, messageId: '34abcd-efghijkj-1234kf', type: 'track', event: 'identify', @@ -104,9 +90,7 @@ export const data = [ datacenterEU: false, }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { channel: 'web', context: { @@ -116,21 +100,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -157,10 +133,7 @@ export const data = [ msgemail: true, msgwhatsapp: false, custom_tags: ['Test_User', 'Interested_User', 'DIY_Hobby'], - custom_mappings: { - Office: 'Trastkiv', - Country: 'Russia', - }, + custom_mappings: { Office: 'Trastkiv', Country: 'Russia' }, address: { city: 'kolkata', country: 'India', @@ -169,9 +142,7 @@ export const data = [ street: '', }, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -210,11 +181,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -259,11 +226,7 @@ export const data = [ version: '1', endpoint: 'https://api.getblueshift.com/api/v1/event', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -307,10 +270,7 @@ export const data = [ msgemail: true, msgwhatsapp: false, custom_tags: ['Test_User', 'Interested_User', 'DIY_Hobby'], - custom_mappings: { - Office: 'Trastkiv', - Country: 'Russia', - }, + custom_mappings: { Office: 'Trastkiv', Country: 'Russia' }, address: { city: 'kolkata', country: 'India', @@ -325,11 +285,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index e44ce4af15..3c77f2c62f 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -14,18 +14,10 @@ export const data = [ type: 'track', event: 'insert product', userId: 'user12345', - - properties: { - count: 10, - productId: 10, - productName: 'Product-10', - }, + properties: { count: 10, productId: 10, productName: 'Product-10' }, anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', }, - metadata: { - jobId: 1, - userId: 'user12345', - }, + metadata: { jobId: 1, userId: 'user12345' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -36,7 +28,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -46,16 +37,9 @@ export const data = [ type: 'track', event: 'insert product', userId: 'user12345', - properties: { - count: 20, - productId: 20, - productName: 'Product-20', - }, - }, - metadata: { - jobId: 2, - userId: 'user12345', + properties: { count: 20, productId: 20, productName: 'Product-20' }, }, + metadata: { jobId: 2, userId: 'user12345' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -66,7 +50,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -76,17 +59,10 @@ export const data = [ type: 'identify', event: 'insert product', userId: 'user12345', - traits: { - count: 20, - productId: 20, - productName: 'Product-20', - }, + traits: { count: 20, productId: 20, productName: 'Product-20' }, anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', }, - metadata: { - jobId: 3, - userId: 'user12345', - }, + metadata: { jobId: 3, userId: 'user12345' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -97,7 +73,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -107,17 +82,10 @@ export const data = [ type: 'track', event: 'insert product', userId: 'user12345', - properties: { - count: 20, - productId: 20, - productName: 'Product-20', - }, + properties: { count: 20, productId: 20, productName: 'Product-20' }, anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', }, - metadata: { - jobId: 5, - userId: 'user123', - }, + metadata: { jobId: 5, userId: 'user123' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -128,7 +96,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -138,17 +105,10 @@ export const data = [ type: 'track', event: 'insert product', userId: 'user12345', - properties: { - count: 20, - productId: 20, - productName: 'Product-20', - }, + properties: { count: 20, productId: 20, productName: 'Product-20' }, anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', }, - metadata: { - jobId: 6, - userId: 'user124', - }, + metadata: { jobId: 6, userId: 'user124' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -159,22 +119,13 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, }, { - message: { - type: 'track', - event: 'insert product', - - userId: 'user12345', - }, - metadata: { - jobId: 7, - userId: 'user124', - }, + message: { type: 'track', event: 'insert product', userId: 'user12345' }, + metadata: { jobId: 7, userId: 'user124' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -185,21 +136,13 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, }, { - message: { - type: 'track', - event: 'insert product', - userId: 'user12345', - }, - metadata: { - jobId: 8, - userId: 'user125', - }, + message: { type: 'track', event: 'insert product', userId: 'user12345' }, + metadata: { jobId: 8, userId: 'user125' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -210,7 +153,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -219,14 +161,9 @@ export const data = [ message: { type: 'identify', event: 'insert product', - userId: 'user12345', - context: { - os: { - Name: '', - version: '', - }, + os: { Name: '', version: '' }, app: { Name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -253,27 +190,16 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - Name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { Name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', }, - - traits: { - count: 20, - productId: 20, - productName: 'Product-20', - }, + traits: { count: 20, productId: 20, productName: 'Product-20' }, receivedAt: '2021-11-15T14:06:42.497+05:30', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', }, - metadata: { - jobId: 9, - userId: 'user125', - }, + metadata: { jobId: 9, userId: 'user125' }, destination: { Config: { rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', @@ -284,7 +210,6 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -306,30 +231,10 @@ export const data = [ datasetId: 'gc_dataset', projectId: 'gc-project-id', properties: [ - { - count: 10, - insertId: '10', - productId: 10, - productName: 'Product-10', - }, - { - count: 20, - insertId: '20', - productId: 20, - productName: 'Product-20', - }, - { - count: 20, - insertId: '20', - productId: 20, - productName: 'Product-20', - }, - { - count: 20, - insertId: '20', - productId: 20, - productName: 'Product-20', - }, + { count: 10, insertId: '10', productId: 10, productName: 'Product-10' }, + { count: 20, insertId: '20', productId: 20, productName: 'Product-20' }, + { count: 20, insertId: '20', productId: 20, productName: 'Product-20' }, + { count: 20, insertId: '20', productId: 20, productName: 'Product-20' }, ], tableId: 'gc_table', }, @@ -347,22 +252,10 @@ export const data = [ Name: 'bqstream test', }, metadata: [ - { - jobId: 1, - userId: 'user12345', - }, - { - jobId: 2, - userId: 'user12345', - }, - { - jobId: 5, - userId: 'user123', - }, - { - jobId: 6, - userId: 'user124', - }, + { jobId: 1, userId: 'user12345' }, + { jobId: 2, userId: 'user12345' }, + { jobId: 5, userId: 'user123' }, + { jobId: 6, userId: 'user124' }, ], statusCode: 200, }, @@ -383,14 +276,8 @@ export const data = [ }, error: 'Invalid payload for the destination', metadata: [ - { - jobId: 7, - userId: 'user124', - }, - { - jobId: 8, - userId: 'user125', - }, + { jobId: 7, userId: 'user124' }, + { jobId: 8, userId: 'user125' }, ], statTags: { destType: 'BQSTREAM', @@ -417,17 +304,10 @@ export const data = [ ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, - error: 'Message Type not supported: identify', metadata: [ - { - jobId: 3, - userId: 'user12345', - }, - { - jobId: 9, - userId: 'user125', - }, + { jobId: 3, userId: 'user12345' }, + { jobId: 9, userId: 'user125' }, ], statTags: { destType: 'BQSTREAM', diff --git a/test/integrations/destinations/branch/router/data.ts b/test/integrations/destinations/branch/router/data.ts index 4c87145b7e..6451c463f1 100644 --- a/test/integrations/destinations/branch/router/data.ts +++ b/test/integrations/destinations/branch/router/data.ts @@ -11,10 +11,7 @@ export const data = [ input: [ { destination: { - Config: { - branchKey: '', - useNativeSDK: false, - }, + Config: { branchKey: '', useNativeSDK: false }, DestinationDefinition: { DisplayName: 'Branch Metrics', ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', @@ -25,9 +22,7 @@ export const data = [ Name: 'branch test', Transformations: [], }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -39,34 +34,19 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.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', - }, + 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, - }, + integrations: { All: true }, messageId: 'ea5cfab2-3961-4d8a-8187-3d1858c90a9f', originalTimestamp: '2020-01-17T04:53:51.185Z', - properties: { - name: 'sampath', - }, + properties: { name: 'sampath' }, receivedAt: '2020-01-17T10:23:52.688+05:30', request_ip: '[::1]:64059', sentAt: '2020-01-17T04:53:52.667Z', @@ -77,10 +57,7 @@ export const data = [ }, { destination: { - Config: { - branchKey: '', - useNativeSDK: false, - }, + Config: { branchKey: '', useNativeSDK: false }, DestinationDefinition: { DisplayName: 'Branch Metrics', ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', @@ -91,9 +68,7 @@ export const data = [ Name: 'branch test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -105,28 +80,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: 'iOS', - version: '', - }, - screen: { - density: 2, - }, + 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', - }, + 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', @@ -154,20 +116,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api2.branch.io/v2/event/standard', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { branch_key: '', name: 'ADD_TO_CART', - content_items: [ - { - $product_name: 'sampath', - }, - ], + content_items: [{ $product_name: 'sampath' }], user_data: { os: 'iOS', os_version: '', @@ -185,18 +140,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - branchKey: '', - useNativeSDK: false, - }, + Config: { branchKey: '', useNativeSDK: false }, DestinationDefinition: { DisplayName: 'Branch Metrics', ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', @@ -214,19 +162,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api2.branch.io/v2/event/custom', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { branch_key: '', name: 'sampath', - custom_data: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + custom_data: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, content_items: [{}], user_data: { os: 'iOS', @@ -245,18 +187,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - branchKey: '', - useNativeSDK: false, - }, + Config: { branchKey: '', useNativeSDK: false }, DestinationDefinition: { DisplayName: 'Branch Metrics', ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', diff --git a/test/integrations/destinations/braze/router/data.ts b/test/integrations/destinations/braze/router/data.ts index 2e3be35b01..76201bda41 100644 --- a/test/integrations/destinations/braze/router/data.ts +++ b/test/integrations/destinations/braze/router/data.ts @@ -27,9 +27,7 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -41,25 +39,15 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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, - }, + integrations: { All: true }, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', originalTimestamp: '2020-01-24T06:29:02.358Z', properties: { @@ -95,9 +83,7 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -109,18 +95,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -130,9 +108,7 @@ export const data = [ 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, - }, + 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', @@ -162,16 +138,11 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: '56yrtsdfgbgxcb-22b4-401d-aae5-1b994be9a969', groupId: 'c90f0fd2-2a02-4f2f-bf07-7e7d2c2ed2b1', - traits: { - phone: '5055077683', - subscriptionState: 'subscribed', - }, + traits: { phone: '5055077683', subscriptionState: 'subscribed' }, userId: 'user123', type: 'group', }, @@ -195,16 +166,11 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { anonymousId: 'dfgdfgdfg-22b4-401d-aae5-1b994be9a969', groupId: '58d0a278-b55b-4f10-b7d2-98d1c5dd4c30', - traits: { - phone: '5055077683', - subscriptionState: 'subscribed', - }, + traits: { phone: '5055077683', subscriptionState: 'subscribed' }, userId: 'user877', type: 'group', }, @@ -228,14 +194,8 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 5, - }, - message: { - type: 'alias', - previousId: 'adsfsaf', - userId: 'dsafsdf', - }, + metadata: { jobId: 5, userId: 'u1' }, + message: { type: 'alias', previousId: 'adsfsaf', userId: 'dsafsdf' }, }, { destination: { @@ -256,14 +216,8 @@ export const data = [ Name: 'Braze', Transformations: [], }, - metadata: { - jobId: 6, - }, - message: { - type: 'alias', - previousId: 'adsfsaf2', - userId: 'dsafsdf2', - }, + metadata: { jobId: 6, userId: 'u1' }, + message: { type: 'alias', previousId: 'adsfsaf2', userId: 'dsafsdf2' }, }, ], destType: 'braze', @@ -379,20 +333,12 @@ export const data = [ JSON: { merge_updates: [ { - identifier_to_keep: { - external_id: 'dsafsdf', - }, - identifier_to_merge: { - external_id: 'adsfsaf', - }, + identifier_to_keep: { external_id: 'dsafsdf' }, + identifier_to_merge: { external_id: 'adsfsaf' }, }, { - identifier_to_keep: { - external_id: 'dsafsdf2', - }, - identifier_to_merge: { - external_id: 'adsfsaf2', - }, + identifier_to_keep: { external_id: 'dsafsdf2' }, + identifier_to_merge: { external_id: 'adsfsaf2' }, }, ], }, @@ -404,24 +350,12 @@ export const data = [ }, ], metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, - { - jobId: 3, - }, - { - jobId: 4, - }, - { - jobId: 5, - }, - { - jobId: 6, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, + { jobId: 3, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, + { jobId: 5, userId: 'u1' }, + { jobId: 6, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -481,9 +415,7 @@ export const data = [ IsProcessorEnabled: true, RevisionID: '2N9Uaf2tWq2QRmatBWQm03Rz6qX', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'track', event: 'Sign In Completed', @@ -503,17 +435,10 @@ export const data = [ account_region: 'ON', is_pickup_selected: 'false', has_tradein_attempt: false, - custom_obj_attr: { - key1: 'value1', - key2: 'value2', - key4: 'value4', - }, + custom_obj_attr: { key1: 'value1', key2: 'value2', key4: 'value4' }, custom_arr: [1, 2, 'str1'], }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.9.5', - }, + 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', @@ -560,9 +485,7 @@ export const data = [ IsProcessorEnabled: true, RevisionID: '2N9Uaf2tWq2QRmatBWQm03Rz6qX', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'track', event: 'Sign In Completed', @@ -582,17 +505,10 @@ export const data = [ account_region: 'ON', is_pickup_selected: 'true', has_tradein_attempt: false, - custom_obj_attr: { - key1: 'value1', - key2: 'value2', - key4: 'value4', - }, + custom_obj_attr: { key1: 'value1', key2: 'value2', key4: 'value4' }, custom_arr: ['1', '2', 'str1'], }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.9.5', - }, + 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', @@ -639,9 +555,7 @@ export const data = [ IsProcessorEnabled: true, RevisionID: '2N9Uaf2tWq2QRmatBWQm03Rz6qX', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -653,18 +567,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -674,9 +580,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', type: 'identify', userId: 'user@50', @@ -705,9 +609,7 @@ export const data = [ IsProcessorEnabled: true, RevisionID: '2N9Uaf2tWq2QRmatBWQm03Rz6qX', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -719,18 +621,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -740,9 +634,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', type: 'identify', userId: 'user@50', @@ -781,11 +673,7 @@ export const data = [ subscribe_once: true, pwa: true, external_id: 'braze_test_user', - custom_obj_attr: { - key1: 'value1', - key2: 'value2', - key4: 'value4', - }, + custom_obj_attr: { key1: 'value1', key2: 'value2', key4: 'value4' }, }, { last_name: 'Miranda 2', @@ -842,15 +730,9 @@ export const data = [ }, ], metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, - { - jobId: 3, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, + { jobId: 3, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -889,11 +771,7 @@ export const data = [ }, statusCode: 400, batched: false, - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], destination: { ID: '2N9UakqKF0D35wfzSeofIxPdL8X', Name: 'Braze-Test', diff --git a/test/integrations/destinations/campaign_manager/router/data.ts b/test/integrations/destinations/campaign_manager/router/data.ts index 2ab1813cf8..5b4e5bcce4 100644 --- a/test/integrations/destinations/campaign_manager/router/data.ts +++ b/test/integrations/destinations/campaign_manager/router/data.ts @@ -17,6 +17,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 1, + userId: 'u1', }, destination: { Config: { @@ -56,21 +57,13 @@ export const data = [ postalCode: 'EC3M', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Promotion Clicked', originalTimestamp: '2022-11-17T00:22:02.903+05:30', @@ -91,9 +84,7 @@ export const data = [ }, type: 'track', anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -106,6 +97,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, destination: { Config: { @@ -145,21 +137,13 @@ export const data = [ postalCode: 'EC3M', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Promotion Clicked', type: 'track', @@ -180,9 +164,7 @@ export const data = [ requestType: 'batchupdate', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -195,6 +177,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 3, + userId: 'u1', }, destination: { Config: { @@ -234,21 +217,13 @@ export const data = [ postalCode: 'EC3M', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Promotion Clicked', type: 'track', @@ -272,9 +247,7 @@ export const data = [ requestType: 'randomValue', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -341,6 +314,7 @@ export const data = [ refresh_token: 'efgh5678', }, jobId: 1, + userId: 'u1', }, ], batched: true, @@ -404,6 +378,7 @@ export const data = [ refresh_token: 'efgh5678', }, jobId: 2, + userId: 'u1', }, ], batched: true, @@ -439,6 +414,7 @@ export const data = [ refresh_token: 'efgh5678', }, jobId: 3, + userId: 'u1', }, ], statusCode: 400, @@ -474,6 +450,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, destination: { Config: { @@ -502,9 +479,7 @@ export const data = [ }, type: 'track', anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -517,6 +492,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, destination: { Config: { @@ -545,9 +521,7 @@ export const data = [ requestType: 'batchinsert', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -560,6 +534,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, destination: { Config: { @@ -588,9 +563,7 @@ export const data = [ requestType: 'batchinsert', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -677,6 +650,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, { secret: { @@ -685,6 +659,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, { secret: { @@ -693,6 +668,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, ], batched: true, @@ -730,6 +706,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, destination: { Config: { @@ -758,9 +735,7 @@ export const data = [ }, type: 'track', anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -773,6 +748,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, destination: { Config: { @@ -801,9 +777,7 @@ export const data = [ requestType: 'batchupdate', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -816,6 +790,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, destination: { Config: { @@ -844,9 +819,7 @@ export const data = [ requestType: 'batchinsert', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -916,6 +889,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, { secret: { @@ -924,6 +898,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, ], batched: true, @@ -983,6 +958,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, ], batched: true, @@ -1020,6 +996,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, destination: { Config: { @@ -1047,9 +1024,7 @@ export const data = [ }, type: 'track', anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -1062,6 +1037,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, destination: { Config: { @@ -1089,9 +1065,7 @@ export const data = [ requestType: 'batchupdate', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -1104,6 +1078,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, destination: { Config: { @@ -1124,7 +1099,6 @@ export const data = [ floodlightConfigurationId: '213123123', floodlightActivityId: '456543345245', value: 7, - ordinal: '1', quantity: '455678', limitAdTracking: true, @@ -1132,9 +1106,7 @@ export const data = [ requestType: 'batchinsert', }, anonymousId: 'randomId', - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2022-11-17T00:22:02.903+05:30', }, @@ -1159,6 +1131,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 4, + userId: 'u1', }, ], batched: false, @@ -1192,6 +1165,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 5, + userId: 'u1', }, ], batched: false, @@ -1225,6 +1199,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 6, + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/candu/router/data.ts b/test/integrations/destinations/candu/router/data.ts index 8aa6441881..e6c7d96a15 100644 --- a/test/integrations/destinations/candu/router/data.ts +++ b/test/integrations/destinations/candu/router/data.ts @@ -18,9 +18,7 @@ export const data = [ Name: 'CANDU', DisplayName: 'Candu', Config: { - destConfig: { - defaultConfig: ['apiKey'], - }, + destConfig: { defaultConfig: ['apiKey'] }, excludeKeys: [], includeKeys: [ 'apiKey', @@ -47,16 +45,12 @@ export const data = [ }, ResponseRules: {}, }, - Config: { - apiKey: 'FXLkLUEhGJyvmY4', - }, + Config: { apiKey: 'FXLkLUEhGJyvmY4' }, Enabled: true, Transformations: [], IsProcessorEnabled: true, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: 'a1b2c3d4e5f6g7h8i9j10', channel: 'mobile', @@ -77,32 +71,21 @@ export const data = [ attTrackingStatus: 3, }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: 'watchos', - }, - screen: { - density: 2, - }, + os: { name: 'watchos' }, + screen: { density: 2 }, traits: { email: 'sampath@gmail.com', name: 'Joker', Gender: 'male', - foo: { - foo: 'bar', - }, + 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, - }, + 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', @@ -156,11 +139,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/clevertap/router/data.ts b/test/integrations/destinations/clevertap/router/data.ts index 2d6ec1dcf0..4f1723a7da 100644 --- a/test/integrations/destinations/clevertap/router/data.ts +++ b/test/integrations/destinations/clevertap/router/data.ts @@ -18,9 +18,7 @@ export const data = [ enableObjectIdMapping: true, }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { channel: 'web', context: { @@ -30,21 +28,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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: 'Android', - version: '', - }, - screen: { - density: 2, - }, + os: { name: 'Android', version: '' }, + screen: { density: 2 }, device: { id: 'f54bb572361c4fd1', name: 'whyred', @@ -77,10 +67,7 @@ export const data = [ msgemail: true, msgwhatsapp: false, custom_tags: ['Test_User', 'Interested_User', 'DIY_Hobby'], - custom_mappings: { - Office: 'Trastkiv', - Country: 'Russia', - }, + custom_mappings: { Office: 'Trastkiv', Country: 'Russia' }, address: { city: 'kolkata', country: 'India', @@ -89,9 +76,7 @@ export const data = [ street: '', }, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -104,15 +89,10 @@ export const data = [ enableObjectIdMapping: true, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'Random', - properties: { - country_region: 'India', - test: 'abc', - }, + properties: { country_region: 'India', test: 'abc' }, receivedAt: '2021-08-20T12:49:07.691Z', rudderId: '138c4214-b537-4f77-9dea-9abde70b5147', type: 'track', @@ -127,23 +107,13 @@ export const data = [ trackAnonymous: true, }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { type: 'group', anonymousId: 'anon-id-new', name: 'Rudder', - properties: { - title: 'Home', - path: '/', - }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + properties: { title: 'Home', path: '/' }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -209,10 +179,7 @@ export const data = [ }, { evtName: 'Random', - evtData: { - country_region: 'India', - test: 'abc', - }, + evtData: { country_region: 'India', test: 'abc' }, type: 'event', objectId: 'cd3a4439-7df0-4475-acb9-6659c7c4dfe3', }, @@ -225,12 +192,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -244,11 +207,7 @@ export const data = [ }, }, { - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 400, error: 'Message type not supported', diff --git a/test/integrations/destinations/clickup/router/data.ts b/test/integrations/destinations/clickup/router/data.ts index 8888024b4f..b77cb90b47 100644 --- a/test/integrations/destinations/clickup/router/data.ts +++ b/test/integrations/destinations/clickup/router/data.ts @@ -1,471 +1,303 @@ export const data = [ - { - name: 'clickup', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { + { + name: 'clickup', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + description: 'Creating task using listId from externalId array', + destination: { + Config: { apiToken: 'pk_123', listId: 'correctListId123' }, + ID: 'clickup-1234', + }, + metadata: { jobId: 1, userId: 'u1' }, + message: { + type: 'track', + event: 'anonymous page visit', + context: { externalId: [{ type: 'clickUpListId', id: 'correctListId456' }] }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + }, + { + description: 'Creating task with assignees', + destination: { + Config: { apiToken: 'pk_123', listId: 'correctListId123' }, + ID: 'clickup-1234', + }, + metadata: { jobId: 2, userId: 'u1' }, + message: { + type: 'track', + event: 'Product Viewed', + properties: { taskName: 'Transformer Testing' }, + context: { + externalId: [ + { type: 'clickUpAssigneeId', id: 61205104 }, + { type: 'clickUpAssigneeId', id: 61217234 }, + { type: 'clickUpAssigneeId', id: 61228575 }, + ], + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + }, + { + description: 'Creating task with valid custom fields values', + destination: { + Config: { + apiToken: 'pk_123', + listId: 'correctListId123', + keyToCustomFieldName: [ + { from: 'industry', to: 'Industry' }, + { from: 'Payment Status', to: 'Payment Status' }, + { from: 'labelKey', to: 'Labels' }, + { from: 'locationKey', to: 'Location' }, + { from: 'phone', to: 'Phone Number' }, + { from: 'email', to: 'Email' }, + { from: 'url', to: 'Url' }, + { from: 'rating', to: 'Rating' }, + { from: 'plan', to: 'Plan' }, + { from: 'contactTitle', to: 'Contact Title' }, + { from: 'date', to: 'Date' }, + ], + }, + ID: 'clickup-1234', + }, + metadata: { jobId: 3, userId: 'u1' }, + message: { + type: 'track', + event: 'Product Viewed', + properties: { + description: 'Creating task with valid custom fields values', + tags: ['testing', 'custom fields'], + timeEstimate: 10800000, + status: 'Ready', + priority: 1, + dueDate: '2022-02-25T13:39:21.032Z', + includeDueDateTime: true, + startDate: '2022-01-20T13:39:21.032Z', + includeStartDateTime: 'true', + notifyAll: false, + industry: 'Retail', + 'Payment Status': 'Pending', + labelKey: ['option 1', 'option 2', 'option 3'], + locationKey: { + lat: -20, + lng: 124, + formattedAddress: 'Gold Coast QLD, Australia', + }, + phone: '+12233445567', + email: 'test123@example.com', + url: 'https://www.rudderstack.com/', + rating: 3, + plan: 'Business', + contactTitle: 'VP of Operations', + date: '2022-02-25T13:39:21.032Z', + }, + context: {}, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + }, + { + description: 'Custom field: Invalid location latitude', + destination: { + Config: { + apiToken: 'pk_123', + listId: 'correctListId123', + keyToCustomFieldName: [{ from: 'location', to: 'Location' }], + }, + ID: 'clickup-1234', + }, + metadata: { jobId: 4, userId: 'u1' }, + message: { + type: 'track', + event: 'Product Viewed', + properties: { + location: { lat: -100, lng: 124, formattedAddress: 'Gold Coast QLD, Australia' }, + }, + context: {}, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + }, + ], + destType: 'clickup', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + batchedRequest: { + body: { FORM: {}, JSON: { name: 'anonymous page visit' }, JSON_ARRAY: {}, XML: {} }, + endpoint: 'https://api.clickup.com/api/v2/list/correctListId456/task', + files: {}, + headers: { Authorization: 'pk_123', 'Content-Type': 'application/json' }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { apiToken: 'pk_123', listId: 'correctListId123' }, + ID: 'clickup-1234', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + statusCode: 200, + }, + { + batched: false, + batchedRequest: { body: { - input: [ - { - "description": "Creating task using listId from externalId array", - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "clickup-1234" - }, - "metadata": { - "jobId": 1 - }, - "message": { - "type": "track", - "event": "anonymous page visit", - "context": { - "externalId": [{ "type": "clickUpListId", "id": "correctListId456" }] - }, - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - } - }, - { - "description": "Creating task with assignees", - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "clickup-1234" - }, - "metadata": { - "jobId": 2 - }, - "message": { - "type": "track", - "event": "Product Viewed", - "properties": { - "taskName": "Transformer Testing" - }, - "context": { - "externalId": [ - { - "type": "clickUpAssigneeId", - "id": 61205104 - }, - { - "type": "clickUpAssigneeId", - "id": 61217234 - }, - { - "type": "clickUpAssigneeId", - "id": 61228575 - } - ] - }, - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - } - }, - { - "description": "Creating task with valid custom fields values", - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123", - "keyToCustomFieldName": [ - { - "from": "industry", - "to": "Industry" - }, - { - "from": "Payment Status", - "to": "Payment Status" - }, - { - "from": "labelKey", - "to": "Labels" - }, - { - "from": "locationKey", - "to": "Location" - }, - { - "from": "phone", - "to": "Phone Number" - }, - { - "from": "email", - "to": "Email" - }, - { - "from": "url", - "to": "Url" - }, - { - "from": "rating", - "to": "Rating" - }, - { - "from": "plan", - "to": "Plan" - }, - { - "from": "contactTitle", - "to": "Contact Title" - }, - { - "from": "date", - "to": "Date" - } - ] - }, - "ID": "clickup-1234" - }, - "metadata": { - "jobId": 3 - }, - "message": { - "type": "track", - "event": "Product Viewed", - "properties": { - "description": "Creating task with valid custom fields values", - "tags": ["testing", "custom fields"], - "timeEstimate": 10800000, - "status": "Ready", - "priority": 1, - "dueDate": "2022-02-25T13:39:21.032Z", - "includeDueDateTime": true, - "startDate": "2022-01-20T13:39:21.032Z", - "includeStartDateTime": "true", - "notifyAll": false, - "industry": "Retail", - "Payment Status": "Pending", - "labelKey": ["option 1", "option 2", "option 3"], - "locationKey": { - "lat": -20, - "lng": 124, - "formattedAddress": "Gold Coast QLD, Australia" - }, - "phone": "+12233445567", - "email": "test123@example.com", - "url": "https://www.rudderstack.com/", - "rating": 3, - "plan": "Business", - "contactTitle": "VP of Operations", - "date": "2022-02-25T13:39:21.032Z" - }, - "context": {}, - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - } - }, - { - "description": "Custom field: Invalid location latitude", - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123", - "keyToCustomFieldName": [ - { - "from": "location", - "to": "Location" - } - ] - }, - "ID": "clickup-1234" - }, - "metadata": { - "jobId": 4 - }, - "message": { - "type": "track", - "event": "Product Viewed", - "properties": { - "location": { - "lat": -100, - "lng": 124, - "formattedAddress": "Gold Coast QLD, Australia" - } - }, - "context": {}, - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - } - } - ] - , - destType: 'clickup', + FORM: {}, + JSON: { assignees: [61205104, 61217234, 61228575], name: 'Transformer Testing' }, + JSON_ARRAY: {}, + XML: {}, }, + endpoint: 'https://api.clickup.com/api/v2/list/correctListId123/task', + files: {}, + headers: { Authorization: 'pk_123', 'Content-Type': 'application/json' }, method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { apiToken: 'pk_123', listId: 'correctListId123' }, + ID: 'clickup-1234', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + statusCode: 200, }, - }, - output: { - response: { - status: 200, + { + batched: false, + batchedRequest: { body: { - output: [ - { - "batched": false, - "batchedRequest": { - "body": { - "FORM": {}, - "JSON": { - "name": "anonymous page visit" - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "https://api.clickup.com/api/v2/list/correctListId456/task", - "files": {}, - "headers": { - "Authorization": "pk_123", - "Content-Type": "application/json" - }, - "method": "POST", - "params": {}, - "type": "REST", - "version": "1" - }, - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "clickup-1234" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "statusCode": 200 - }, - { - "batched": false, - "batchedRequest": { - "body": { - "FORM": {}, - "JSON": { - "assignees": [61205104, 61217234, 61228575], - "name": "Transformer Testing" - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "https://api.clickup.com/api/v2/list/correctListId123/task", - "files": {}, - "headers": { - "Authorization": "pk_123", - "Content-Type": "application/json" - }, - "method": "POST", - "params": {}, - "type": "REST", - "version": "1" - }, - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "clickup-1234" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "statusCode": 200 + FORM: {}, + JSON: { + custom_fields: [ + { + id: 'a5f5044a-cbad-4caf-bcbb-4cd32bd8db7c', + value: 'c7f9b6f5-cd98-4609-af10-68a8710cc1bf', + }, + { + id: '22eaffee-ffec-4c3b-bdae-56e69d55eecd', + value: '7afcb6fb-cec8-41d8-bf0c-039a9db28460', + }, + { + id: '19d3ac4e-2b1e-4569-b33e-ff86c7d94d6e', + value: [ + '32c81c1c-cf53-4829-92f5-0f0270d27a45', + '7e24f329-9dd9-4e68-b426-2c70af6f9347', + ], + }, + { + id: 'ea6c1e48-2abf-4328-b228-79c213e147c8', + value: { + formatted_address: 'Gold Coast QLD, Australia', + location: { lat: -20, lng: 124 }, }, - { - "batched": false, - "batchedRequest": { - "body": { - "FORM": {}, - "JSON": { - "custom_fields": [ - { - "id": "a5f5044a-cbad-4caf-bcbb-4cd32bd8db7c", - "value": "c7f9b6f5-cd98-4609-af10-68a8710cc1bf" - }, - { - "id": "22eaffee-ffec-4c3b-bdae-56e69d55eecd", - "value": "7afcb6fb-cec8-41d8-bf0c-039a9db28460" - }, - { - "id": "19d3ac4e-2b1e-4569-b33e-ff86c7d94d6e", - "value": [ - "32c81c1c-cf53-4829-92f5-0f0270d27a45", - "7e24f329-9dd9-4e68-b426-2c70af6f9347" - ] - }, - { - "id": "ea6c1e48-2abf-4328-b228-79c213e147c8", - "value": { - "formatted_address": "Gold Coast QLD, Australia", - "location": { - "lat": -20, - "lng": 124 - } - } - }, - { - "id": "c9b83d91-b979-4b34-b4bd-88bf9cf2b9a6", - "value": "+12233445567" - }, - { - "id": "ebe825fb-92de-41ce-a29c-25018da039b4", - "value": "test123@example.com" - }, - { - "id": "b01b32fd-94d3-43e6-9f31-2c855ff169cd", - "value": "https://www.rudderstack.com/" - }, - { - "id": "f431cda3-a575-4a05-ba8d-583d9b6cb2df", - "value": 3 - }, - { - "id": "4b7a29be-e261-4340-8f3f-e6de838473e5", - "value": "c5032049-8c05-44e9-a000-3a071d457b8f" - }, - { - "id": "4bfebc00-9d4a-40d1-aef8-5a87b610186c", - "value": "VP of Operations" - }, - { - "id": "666f74bf-6d87-41f3-8735-ccf0efe066dd", - "value": 1645796361032 - } - ], - "name": "Product Viewed", - "description": "Creating task with valid custom fields values", - "tags": ["testing", "custom fields"], - "time_estimate": 10800000, - "status": "Ready", - "priority": 1, - "due_date": 1645796361032, - "due_date_time": true, - "start_date": 1642685961032, - "start_date_time": "true", - "notify_all": false - }, - "JSON_ARRAY": {}, - "XML": {} - }, - "endpoint": "https://api.clickup.com/api/v2/list/correctListId123/task", - "files": {}, - "headers": { - "Authorization": "pk_123", - "Content-Type": "application/json" - }, - "method": "POST", - "params": {}, - "type": "REST", - "version": "1" - }, - "destination": { - "Config": { - "apiToken": "pk_123", - "keyToCustomFieldName": [ - { - "from": "industry", - "to": "Industry" - }, - { - "from": "Payment Status", - "to": "Payment Status" - }, - { - "from": "labelKey", - "to": "Labels" - }, - { - "from": "locationKey", - "to": "Location" - }, - { - "from": "phone", - "to": "Phone Number" - }, - { - "from": "email", - "to": "Email" - }, - { - "from": "url", - "to": "Url" - }, - { - "from": "rating", - "to": "Rating" - }, - { - "from": "plan", - "to": "Plan" - }, - { - "from": "contactTitle", - "to": "Contact Title" - }, - { - "from": "date", - "to": "Date" - } - ], - "listId": "correctListId123" - }, - "ID": "clickup-1234" - }, - "metadata": [ - { - "jobId": 3 - } - ], - "statusCode": 200 - }, - { - "destination": { - "Config": { - "apiToken": "pk_123", - "listId": "correctListId123", - "keyToCustomFieldName": [ - { - "from": "location", - "to": "Location" - } - ] - }, - "ID": "clickup-1234" - }, - "batched": false, - "error": "Invalid value specified for latitude. Latitude must be in range \"[-90, 90]\"", - "metadata": [ - { - "jobId": 4 - } - ], - "statTags": { - "destType": "CLICKUP", - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "feature": "router", - "implementation": "native", - "module": "destination", - }, - "statusCode": 400 - } - ] - , + }, + { id: 'c9b83d91-b979-4b34-b4bd-88bf9cf2b9a6', value: '+12233445567' }, + { id: 'ebe825fb-92de-41ce-a29c-25018da039b4', value: 'test123@example.com' }, + { + id: 'b01b32fd-94d3-43e6-9f31-2c855ff169cd', + value: 'https://www.rudderstack.com/', + }, + { id: 'f431cda3-a575-4a05-ba8d-583d9b6cb2df', value: 3 }, + { + id: '4b7a29be-e261-4340-8f3f-e6de838473e5', + value: 'c5032049-8c05-44e9-a000-3a071d457b8f', + }, + { id: '4bfebc00-9d4a-40d1-aef8-5a87b610186c', value: 'VP of Operations' }, + { id: '666f74bf-6d87-41f3-8735-ccf0efe066dd', value: 1645796361032 }, + ], + name: 'Product Viewed', + description: 'Creating task with valid custom fields values', + tags: ['testing', 'custom fields'], + time_estimate: 10800000, + status: 'Ready', + priority: 1, + due_date: 1645796361032, + due_date_time: true, + start_date: 1642685961032, + start_date_time: 'true', + notify_all: false, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.clickup.com/api/v2/list/correctListId123/task', + files: {}, + headers: { Authorization: 'pk_123', 'Content-Type': 'application/json' }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + apiToken: 'pk_123', + keyToCustomFieldName: [ + { from: 'industry', to: 'Industry' }, + { from: 'Payment Status', to: 'Payment Status' }, + { from: 'labelKey', to: 'Labels' }, + { from: 'locationKey', to: 'Location' }, + { from: 'phone', to: 'Phone Number' }, + { from: 'email', to: 'Email' }, + { from: 'url', to: 'Url' }, + { from: 'rating', to: 'Rating' }, + { from: 'plan', to: 'Plan' }, + { from: 'contactTitle', to: 'Contact Title' }, + { from: 'date', to: 'Date' }, + ], + listId: 'correctListId123', + }, + ID: 'clickup-1234', + }, + metadata: [{ jobId: 3, userId: 'u1' }], + statusCode: 200, + }, + { + destination: { + Config: { + apiToken: 'pk_123', + listId: 'correctListId123', + keyToCustomFieldName: [{ from: 'location', to: 'Location' }], }, + ID: 'clickup-1234', + }, + batched: false, + error: 'Invalid value specified for latitude. Latitude must be in range "[-90, 90]"', + metadata: [{ jobId: 4, userId: 'u1' }], + statTags: { + destType: 'CLICKUP', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/courier/router/data.ts b/test/integrations/destinations/courier/router/data.ts index a3a3237197..268504b903 100644 --- a/test/integrations/destinations/courier/router/data.ts +++ b/test/integrations/destinations/courier/router/data.ts @@ -15,28 +15,14 @@ export const data = [ channel: 'web', event: 'Product Added', userId: 'test123', - properties: { - price: 999, - quantity: 1, - }, - context: { - traits: { - firstName: 'John', - age: 27, - }, - }, + 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: 'dummyApiKey', - }, - }, - metadata: { - jobId: 1, - }, + destination: { Config: { apiKey: 'dummyApiKey' } }, + metadata: { jobId: 1, userId: 'u1' }, }, { message: { @@ -59,9 +45,7 @@ export const data = [ trackNamedPages: true, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'courier', @@ -92,16 +76,8 @@ export const data = [ channel: 'web', event: 'Product Added', userId: 'test123', - properties: { - price: 999, - quantity: 1, - }, - context: { - traits: { - firstName: 'John', - age: 27, - }, - }, + 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', @@ -112,26 +88,14 @@ export const data = [ }, files: {}, }, - destination: { - Config: { - apiKey: 'dummyApiKey', - }, - }, - metadata: [ - { - jobId: 1, - }, - ], + destination: { Config: { apiKey: 'dummyApiKey' } }, + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { batched: false, error: 'apiKey is required', - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { destType: 'COURIER', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/criteo_audience/router/data.ts b/test/integrations/destinations/criteo_audience/router/data.ts index a91c112663..755d83547e 100644 --- a/test/integrations/destinations/criteo_audience/router/data.ts +++ b/test/integrations/destinations/criteo_audience/router/data.ts @@ -1,7 +1,7 @@ export const data = [ { name: 'criteo_audience', - description: 'Test 0', + description: 'Event Stream test cases', feature: 'router', module: 'destination', version: 'v0', @@ -19,12 +19,7 @@ export const data = [ }, ID: 'iwehr83843', }, - metadata: { - secret: { - accessToken: 'success_access_token', - }, - jobId: 1, - }, + metadata: { secret: { accessToken: 'success_access_token' }, jobId: 1, userId: 'u1' }, message: { userId: 'user 1', type: 'audiencelist', @@ -52,12 +47,7 @@ export const data = [ ], }, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -71,12 +61,7 @@ export const data = [ }, ID: 'iwehr83843', }, - metadata: { - secret: { - accessToken: 'success_access_token', - }, - jobId: 2, - }, + metadata: { secret: { accessToken: 'success_access_token' }, jobId: 2, userId: 'u1' }, message: { userId: 'user 1', type: 'audiencelist', @@ -112,9 +97,7 @@ export const data = [ ], }, }, - context: { - ip: '14.5.67.21', - }, + context: { ip: '14.5.67.21' }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -162,12 +145,7 @@ export const data = [ }, ], metadata: [ - { - jobId: 1, - secret: { - accessToken: 'success_access_token', - }, - }, + { jobId: 1, secret: { accessToken: 'success_access_token' }, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -243,8 +221,206 @@ export const data = [ }, ], metadata: [ + { jobId: 2, secret: { accessToken: 'success_access_token' }, userId: 'u1' }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + clientId: 'abcdef8-f49-4cd6-b4c5-958b3d66d431', + clientSecret: 'sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg', + audienceId: '34893', + audienceType: 'madid', + }, + ID: 'iwehr83843', + }, + }, + ], + }, + }, + }, + }, + { + name: 'criteo_audience', + description: 'Retl test cases', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + clientId: 'abcdef8-f49-4cd6-b4c5-958b3d66d431', + clientSecret: 'sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg', + audienceId: '34893', + audienceType: 'email', + }, + ID: 'iwehr83843', + }, + metadata: { + secret: { + accessToken: 'success_access_token', + }, + jobId: 1, + userId: 'u1', + }, + 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: { + externalId: [ + { + type: 'CRITEO_AUDIENCE-23848494844100489', + identifierType: 'EMAIL', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + { + destination: { + Config: { + clientId: 'abcdef8-f49-4cd6-b4c5-958b3d66d431', + clientSecret: 'sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg', + audienceType: 'email', + 'warehouse-adAccountId': '123', + }, + ID: 'iwehr83843', + }, + metadata: { + secret: { + accessToken: 'success_access_token', + }, + jobId: 2, + userId: 'u1', + }, + 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: { + externalId: [ + { + type: 'CRITEO_AUDIENCE-23848494844100489', + identifierType: 'EMAIL', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + destType: 'criteo_audience', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ { - jobId: 2, + 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, + userId: 'u1', secret: { accessToken: 'success_access_token', }, @@ -257,7 +433,61 @@ export const data = [ clientId: 'abcdef8-f49-4cd6-b4c5-958b3d66d431', clientSecret: 'sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg', audienceId: '34893', - audienceType: 'madid', + audienceType: 'email', + }, + ID: 'iwehr83843', + }, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'PATCH', + endpoint: + 'https://api.criteo.com/2022-10/audiences/23848494844100489/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: 2, + userId: 'u1', + secret: { + accessToken: 'success_access_token', + }, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + clientId: 'abcdef8-f49-4cd6-b4c5-958b3d66d431', + clientSecret: 'sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg', + 'warehouse-adAccountId': '123', + audienceType: 'email', }, ID: 'iwehr83843', }, diff --git a/test/integrations/destinations/custify/router/data.ts b/test/integrations/destinations/custify/router/data.ts index 12639192f8..a88f36fc69 100644 --- a/test/integrations/destinations/custify/router/data.ts +++ b/test/integrations/destinations/custify/router/data.ts @@ -1,242 +1,201 @@ export const data = [ - { - name: 'custify', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - "description": "Group callw with all parameters", - "destination": { - "Config": { - "apiKey": "apiKey_key_test_001", - "sendAnonymousId": false - }, - "ID": "custify-1234" - }, - "metadata": { - "jobId": 1 - }, - "message": { - "type": "group", - "userId": "user_111", - "groupId": "company_222", - "traits": { - "name": "Absolute Company", - "industry": " Absolute", - "employees": 121, - "size": 100, - "website": "www.rudder.com", - "plan": "GOLD", - "monthly_revenue": 8000, - "churned": false, - "test_att1": "test_att_val1" - }, - "context": { - "traits": { - "firstName": "Absolute", - "lastName": "User", - "phone": 9830311522, - "session_count": 23, - "signed_up_at": "2022-04-27T13:56:13.012Z", - "custom_prop1": "custom_value1", - "custom_prop2": 123, - "custom_prop3": false, - "custom_prop4": { - "test": "test" - }, - "custom_prop5": [1, 3, 4], - "createdAt": "2022-04-27T13:56:13.012Z" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-01-21T00:21:34.208Z" - } - }, - { - "description": "Identify with all parameters", - "destination": { - "Config": { - "apiKeyToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "custify-1234" - }, - "metadata": { - "jobId": 2 - }, - "message": { - "type": "identify", - "userId": "user_1234", - "context": { - "traits": { - "email": "user111@gmail.com", - "firstName": "New", - "lastName": "User", - "phone": 9830311522, - "sessionCount": 23, - "unsubscribedFromEmails": false, - "unsubscribedFromCalls": false, - - "signed_up_at": "2022-04-27T13:56:13.012Z", - "custom_prop1": "custom_value1", - "custom_prop2": 123, - "custom_prop3": false, - "custom_prop4": { "test": "test" }, - "custom_prop5": [1, 3, 4], - "createdAt": "2022-04-27T13:56:13.012Z", - "company": { - "id": "company_123" - } - } - }, - "timestamp": "2022-04-27T13:56:13.012Z", - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - }, - "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647", - "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04", - "anonymousId": "bf412108-0357-4330-b119-7305e767823c" - } - ], - destType: 'custify', + { + name: 'custify', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + description: 'Group callw with all parameters', + destination: { + Config: { apiKey: 'apiKey_key_test_001', sendAnonymousId: false }, + ID: 'custify-1234', + }, + metadata: { jobId: 1, userId: 'u1' }, + message: { + type: 'group', + userId: 'user_111', + groupId: 'company_222', + traits: { + name: 'Absolute Company', + industry: ' Absolute', + employees: 121, + size: 100, + website: 'www.rudder.com', + plan: 'GOLD', + monthly_revenue: 8000, + churned: false, + test_att1: 'test_att_val1', }, - method: 'POST', + context: { + traits: { + firstName: 'Absolute', + lastName: 'User', + phone: 9830311522, + session_count: 23, + signed_up_at: '2022-04-27T13:56:13.012Z', + custom_prop1: 'custom_value1', + custom_prop2: 123, + custom_prop3: false, + custom_prop4: { test: 'test' }, + custom_prop5: [1, 3, 4], + createdAt: '2022-04-27T13:56:13.012Z', + }, + ip: '14.5.67.21', + library: { name: 'http' }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, }, + { + description: 'Identify with all parameters', + destination: { + Config: { apiKeyToken: 'pk_123', listId: 'correctListId123' }, + ID: 'custify-1234', + }, + metadata: { jobId: 2, userId: 'u1' }, + message: { + type: 'identify', + userId: 'user_1234', + context: { + traits: { + email: 'user111@gmail.com', + firstName: 'New', + lastName: 'User', + phone: 9830311522, + sessionCount: 23, + unsubscribedFromEmails: false, + unsubscribedFromCalls: false, + signed_up_at: '2022-04-27T13:56:13.012Z', + custom_prop1: 'custom_value1', + custom_prop2: 123, + custom_prop3: false, + custom_prop4: { test: 'test' }, + custom_prop5: [1, 3, 4], + createdAt: '2022-04-27T13:56:13.012Z', + company: { id: 'company_123' }, + }, + }, + timestamp: '2022-04-27T13:56:13.012Z', + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + }, + ], + destType: 'custify', }, - output: { - response: { - status: 200, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.custify.com/people', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apiKey_key_test_001', + Accept: 'application/json', + }, + params: {}, + body: { + JSON: { + user_id: 'user_111', + phone: 9830311522, + signed_up_at: '2020-01-21T00:21:34.208Z', + custom_attributes: { + firstName: 'Absolute', + lastName: 'User', + custom_prop1: 'custom_value1', + custom_prop2: 123, + custom_prop3: false, + createdAt: '2022-04-27T13:56:13.012Z', + }, + name: 'Absolute User', + companies: [{ company_id: 'company_222', remove: false }], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: 'user_111', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { apiKey: 'apiKey_key_test_001', sendAnonymousId: false }, + ID: 'custify-1234', + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.custify.com/people', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer undefined', + Accept: 'application/json', + }, + params: {}, body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.custify.com/people", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer apiKey_key_test_001", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "user_111", - "phone": 9830311522, - "signed_up_at": "2020-01-21T00:21:34.208Z", - "custom_attributes": { - "firstName": "Absolute", - "lastName": "User", - "custom_prop1": "custom_value1", - "custom_prop2": 123, - "custom_prop3": false, - "createdAt": "2022-04-27T13:56:13.012Z" - }, - "name": "Absolute User", - "companies": [ - { - "company_id": "company_222", - "remove": false - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "user_111" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "apiKey_key_test_001", - "sendAnonymousId": false - }, - "ID": "custify-1234" - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.custify.com/people", - "headers": { - "Content-Type": "application/json", - "Authorization": "Bearer undefined", - "Accept": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "user_id": "user_1234", - "email": "user111@gmail.com", - "phone": 9830311522, - "session_count": 23, - "unsubscribed_from_emails": false, - "unsubscribed_from_calls": false, - "signed_up_at": "2022-04-27T13:56:13.012Z", - "custom_attributes": { - "firstName": "New", - "lastName": "User", - "sessionCount": 23, - "unsubscribedFromEmails": false, - "unsubscribedFromCalls": false, - "custom_prop1": "custom_value1", - "custom_prop2": 123, - "custom_prop3": false, - "createdAt": "2022-04-27T13:56:13.012Z" - }, - "name": "New User", - "companies": [ - { - "company_id": "company_123", - "remove": false - } - ] - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "user_1234" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKeyToken": "pk_123", - "listId": "correctListId123" - }, - "ID": "custify-1234" - } - } - ], + JSON: { + user_id: 'user_1234', + email: 'user111@gmail.com', + phone: 9830311522, + session_count: 23, + unsubscribed_from_emails: false, + unsubscribed_from_calls: false, + signed_up_at: '2022-04-27T13:56:13.012Z', + custom_attributes: { + firstName: 'New', + lastName: 'User', + sessionCount: 23, + unsubscribedFromEmails: false, + unsubscribedFromCalls: false, + custom_prop1: 'custom_value1', + custom_prop2: 123, + custom_prop3: false, + createdAt: '2022-04-27T13:56:13.012Z', + }, + name: 'New User', + companies: [{ company_id: 'company_123', remove: false }], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, }, + files: {}, + userId: 'user_1234', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { apiKeyToken: 'pk_123', listId: 'correctListId123' }, + ID: 'custify-1234', + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/customerio/router/data.ts b/test/integrations/destinations/customerio/router/data.ts index 9a34377714..1275147710 100644 --- a/test/integrations/destinations/customerio/router/data.ts +++ b/test/integrations/destinations/customerio/router/data.ts @@ -32,34 +32,21 @@ export const data = [ ip: '0.0.0.0', age: 26, }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, - }, - user_properties: { - prop1: 'val1', - prop2: 'val2', + 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, - }, + integrations: { All: true }, traits: { anonymousId: 'anon-id', email: 'test@gmail.com', @@ -74,9 +61,7 @@ export const data = [ }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { datacenterEU: false, @@ -95,25 +80,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'test@rudderstack.com', - anonymousId: '12345', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + traits: { email: 'test@rudderstack.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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'page', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -127,15 +101,11 @@ export const data = [ title: 'Test Page', url: 'www.rudderlabs.com', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { datacenterEU: false, @@ -155,25 +125,15 @@ export const data = [ version: '1.1.0-beta.2', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.0-beta.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.0-beta.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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, - }, + integrations: { All: true }, traits: { domainNames: 'rudderstack.com', email: 'help@rudderstack.com', @@ -183,9 +143,7 @@ export const data = [ type: 'group', userId: 'user@1', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { datacenterEU: false, @@ -205,25 +163,15 @@ export const data = [ version: '1.1.0-beta.2', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.0-beta.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.0-beta.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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, - }, + integrations: { All: true }, traits: { domainNames: 'rudderstack.com', email: 'help@rudderstack.com', @@ -233,9 +181,7 @@ export const data = [ type: 'group', userId: 'user@1', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { datacenterEU: false, @@ -261,9 +207,7 @@ export const data = [ type: 'REST', method: 'PUT', endpoint: 'https://track.customer.io/api/v1/customers/123456', - headers: { - Authorization: 'Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6ZHVtbXlBcGlLZXk=', - }, + headers: { Authorization: 'Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6ZHVtbXlBcGlLZXk=' }, params: {}, body: { JSON: { @@ -287,11 +231,7 @@ export const data = [ userId: '123456', statusCode: 200, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -308,9 +248,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://track.customer.io/api/v1/customers/12345/events', - headers: { - Authorization: 'Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6ZHVtbXlBcGlLZXk=', - }, + headers: { Authorization: 'Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6ZHVtbXlBcGlLZXk=' }, params: {}, body: { JSON: { @@ -333,11 +271,7 @@ export const data = [ userId: '12345', statusCode: 200, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -372,17 +306,8 @@ export const data = [ email: 'help@rudderstack.com', domainNames: 'rudderstack.com', }, - identifiers: { - object_id: 'group@1', - object_type_id: '1', - }, - cio_relationships: [ - { - identifiers: { - id: 'user@1', - }, - }, - ], + identifiers: { object_id: 'group@1', object_type_id: '1' }, + cio_relationships: [{ identifiers: { id: 'user@1' } }], }, { type: 'object', @@ -392,17 +317,8 @@ export const data = [ email: 'help@rudderstack.com', domainNames: 'rudderstack.com', }, - identifiers: { - object_id: 'group@1', - object_type_id: '1', - }, - cio_relationships: [ - { - identifiers: { - id: 'user@1', - }, - }, - ], + identifiers: { object_id: 'group@1', object_type_id: '1' }, + cio_relationships: [{ identifiers: { id: 'user@1' } }], }, ], }, @@ -411,12 +327,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 3, - }, - { - jobId: 4, - }, + { jobId: 3, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, ], batched: false, statusCode: 200, diff --git a/test/integrations/destinations/delighted/router/data.ts b/test/integrations/destinations/delighted/router/data.ts index 115ac7b05e..b9e9882383 100644 --- a/test/integrations/destinations/delighted/router/data.ts +++ b/test/integrations/destinations/delighted/router/data.ts @@ -1,191 +1,177 @@ export const data = [ - { - name: 'delighted', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { + { + name: 'delighted', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + channel: 'email', + delay: 0, + eventNamesSettings: [{ event: '' }], + }, + }, + metadata: { jobId: 1, userId: 'u1' }, + 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', + type: 'identify', + userId: 'abc@123.com', + traits: { + firstName: 'James', + lastName: 'Doe', + phone: '+92374162212', + last_sent_at: '1626698350', + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + channel: 'email', + delay: 0, + eventNamesSettings: [{ event: '' }], + }, + }, + metadata: { jobId: 2, userId: 'u1' }, + 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', + type: 'alias', + previousId: '123@abc.com', + userId: 'abc@123.com', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + destType: 'delighted', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { body: { - input: [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "channel": "email", - "delay": 0, - "eventNamesSettings": [{ "event": "" }] - } - }, - "metadata": { - "jobId": 1 - }, - "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", - "type": "identify", - "userId": "abc@123.com", - "traits": { - "firstName": "James", - "lastName": "Doe", - "phone": "+92374162212", - "last_sent_at": "1626698350" - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "channel": "email", - "delay": 0, - "eventNamesSettings": [{ "event": "" }] - } - }, - "metadata": { - "jobId": 2 - }, - "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", - "type": "alias", - "previousId": "123@abc.com", - "userId": "abc@123.com", - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - } - ], - destType: 'delighted', + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + email: 'abc@123.com', + send: false, + channel: 'email', + delay: 0, + last_sent_at: '1626698350', + name: 'James Doe', + phone_number: '+92374162212', + }, }, + type: 'REST', + files: {}, method: 'POST', + params: {}, + headers: { + Authorization: 'Basic ZHVtbXlBcGlLZXk=', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.delighted.com/v1/people.json', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + channel: 'email', + delay: 0, + eventNamesSettings: [{ event: '' }], + }, + }, }, - }, - output: { - response: { - status: 200, + { + batchedRequest: { body: { - output: [ - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "email": "abc@123.com", - "send": false, - "channel": "email", - "delay": 0, - "last_sent_at": "1626698350", - "name": "James Doe", - "phone_number": "+92374162212" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Authorization": "Basic ZHVtbXlBcGlLZXk=", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.delighted.com/v1/people.json" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "channel": "email", - "delay": 0, - "eventNamesSettings": [{ "event": "" }] - } - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "email": "123@abc.com", - "email_update": "abc@123.com" - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Authorization": "Basic ZHVtbXlBcGlLZXk=", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.delighted.com/v1/people.json" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "channel": "email", - "delay": 0, - "eventNamesSettings": [{ "event": "" }] - } - } - } - ] - , + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { email: '123@abc.com', email_update: 'abc@123.com' }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + Authorization: 'Basic ZHVtbXlBcGlLZXk=', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.delighted.com/v1/people.json', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + channel: 'email', + delay: 0, + eventNamesSettings: [{ event: '' }], }, + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/discord/router/data.ts b/test/integrations/destinations/discord/router/data.ts index 55861635b0..5518df8dcf 100644 --- a/test/integrations/destinations/discord/router/data.ts +++ b/test/integrations/destinations/discord/router/data.ts @@ -17,10 +17,7 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [], @@ -43,15 +40,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.1-rc.1', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.1-rc.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.1-rc.1' }, locale: 'en-US', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/tests/html/script-test.html', referrer: 'http://localhost:1111/tests/html/', @@ -59,9 +50,7 @@ export const data = [ title: '', url: 'http://localhost:1111/tests/html/script-test.html', }, - screen: { - density: 1.7999999523162842, - }, + screen: { density: 1.7999999523162842 }, traits: { country: 'India', email: 'name@domain.com', @@ -71,9 +60,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', originalTimestamp: '2020-03-23T03:46:30.916Z', properties: { @@ -90,9 +77,7 @@ export const data = [ type: 'page', userId: '12345', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { destination: { @@ -102,25 +87,16 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [], eventTemplateSettings: [], webhookUrl: 'https://abcd.com/efgh/89078/979868/98678', whitelistedTraitsSettings: [ - { - trait: 'country', - }, - { - trait: 'email', - }, - { - trait: 'name', - }, + { trait: 'country' }, + { trait: 'email' }, + { trait: 'name' }, ], }, Enabled: true, @@ -131,9 +107,7 @@ export const data = [ anonymousId: '12345', channel: 'web', context: { - screen: { - density: 1.7999999523162842, - }, + screen: { density: 1.7999999523162842 }, traits: { country: 'India', email: 'name@domain.com', @@ -149,9 +123,7 @@ export const data = [ hiji: 'hulala-1', name: 'my-name-1', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', originalTimestamp: '2020-03-23T03:41:46.122Z', receivedAt: '2020-03-23T09:11:46.244+05:30', @@ -168,6 +140,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, { @@ -178,10 +151,7 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventTemplateSettings: [ @@ -199,14 +169,7 @@ export const data = [ ], IdentifyTemplate: 'identified {{name}} with {{traits}}', webhookUrl: 'https://abcd.com/efgh/89078/979868/98678', - whitelistedTraitsSettings: [ - { - trait: 'hiji', - }, - { - trait: '', - }, - ], + whitelistedTraitsSettings: [{ trait: 'hiji' }, { trait: '' }], }, Enabled: true, Transformations: [], @@ -226,9 +189,7 @@ export const data = [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', }, event: 'test_eventing_testis', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', originalTimestamp: '2020-03-23T03:46:30.922Z', properties: { @@ -252,6 +213,7 @@ export const data = [ jobId: 129, messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, ], @@ -273,10 +235,7 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [], @@ -289,11 +248,7 @@ export const data = [ Transformations: [], IsProcessorEnabled: true, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statTags: { destType: 'DISCORD', feature: 'router', @@ -312,9 +267,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://abcd.com/efgh/89078/979868/98678', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -334,25 +287,16 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [], eventTemplateSettings: [], webhookUrl: 'https://abcd.com/efgh/89078/979868/98678', whitelistedTraitsSettings: [ - { - trait: 'country', - }, - { - trait: 'email', - }, - { - trait: 'name', - }, + { trait: 'country' }, + { trait: 'email' }, + { trait: 'name' }, ], }, Enabled: true, @@ -367,6 +311,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], batched: false, @@ -378,9 +323,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://abcd.com/efgh/89078/979868/98678', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -399,10 +342,7 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'DISCORD', DisplayName: 'Discord', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventTemplateSettings: [ @@ -420,14 +360,7 @@ export const data = [ ], IdentifyTemplate: 'identified {{name}} with {{traits}}', webhookUrl: 'https://abcd.com/efgh/89078/979868/98678', - whitelistedTraitsSettings: [ - { - trait: 'hiji', - }, - { - trait: '', - }, - ], + whitelistedTraitsSettings: [{ trait: 'hiji' }, { trait: '' }], }, Enabled: true, Transformations: [], @@ -441,6 +374,7 @@ export const data = [ jobId: 129, messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/drip/router/data.ts b/test/integrations/destinations/drip/router/data.ts index d13c73a0d1..44aac7dd1a 100644 --- a/test/integrations/destinations/drip/router/data.ts +++ b/test/integrations/destinations/drip/router/data.ts @@ -1,210 +1,189 @@ export const data = [ - { - name: 'drip', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { + { + name: 'drip', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + accountId: '1809802', + campaignId: '', + enableUserCreation: true, + }, + }, + metadata: { jobId: 1, userId: 'u1' }, + 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', + type: 'identify', + traits: { + email: 'test1@gmail.com', + firstName: 'James', + lastName: 'Doe', + phone: '237416221', + customFields: { filter1: 'filterval1' }, + }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + accountId: '1809802', + campaignId: '915194776', + enableUserCreation: true, + }, + }, + metadata: { jobId: 2, userId: 'u1' }, + 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', + type: 'track', + event: 'testing', + properties: { email: 'user1@gmail.com', customFields: { field1: 'val1' } }, + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + destType: 'drip', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { body: { - input: [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "accountId": "1809802", - "campaignId": "", - "enableUserCreation": true - } - }, - "metadata": { - "jobId": 1 - }, - "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", - "type": "identify", - "traits": { - "email": "test1@gmail.com", - "firstName": "James", - "lastName": "Doe", - "phone": "237416221", - "customFields": { - "filter1": "filterval1" - } - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "accountId": "1809802", - "campaignId": "915194776", - "enableUserCreation": true - } - }, - "metadata": { - "jobId": 2 - }, - "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", - "type": "track", - "event": "testing", - "properties": { - "email": "user1@gmail.com", - "customFields": { - "field1": "val1" - } - }, - "integrations": { "All": true }, - "sentAt": "2019-10-14T09:03:22.563Z" - } - } + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + subscribers: [ + { + email: 'test1@gmail.com', + first_name: 'James', + last_name: 'Doe', + phone: '237416221', + ip_address: '0.0.0.0', + custom_fields: { filter1: 'filterval1' }, + }, ], - destType: 'drip', + }, }, + type: 'REST', + files: {}, method: 'POST', + params: {}, + headers: { + Authorization: 'Basic ZHVtbXlBcGlLZXk=', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.getdrip.com/v2/1809802/subscribers', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + accountId: '1809802', + campaignId: '', + enableUserCreation: true, + }, + }, }, - }, - output: { - response: { - status: 200, + { + batchedRequest: { body: { - output: [ - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "subscribers": [ - { - "email": "test1@gmail.com", - "first_name": "James", - "last_name": "Doe", - "phone": "237416221", - "ip_address": "0.0.0.0", - "custom_fields": { - "filter1": "filterval1" - } - } - ] - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Authorization": "Basic ZHVtbXlBcGlLZXk=", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.getdrip.com/v2/1809802/subscribers" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "accountId": "1809802", - "campaignId": "", - "enableUserCreation": true - } - } - }, - { - "batchedRequest": { - "body": { - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {}, - "JSON": { - "events": [ - { - "email": "user1@gmail.com", - "properties": { - "field1": "val1" - }, - "action": "testing", - "occurred_at": "2019-10-14T09:03:17.562Z" - } - ] - } - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Authorization": "Basic ZHVtbXlBcGlLZXk=", - "Content-Type": "application/json" - }, - "version": "1", - "endpoint": "https://api.getdrip.com/v2/1809802/events" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "accountId": "1809802", - "campaignId": "915194776", - "enableUserCreation": true - } - } - } + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + events: [ + { + email: 'user1@gmail.com', + properties: { field1: 'val1' }, + action: 'testing', + occurred_at: '2019-10-14T09:03:17.562Z', + }, ], + }, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + Authorization: 'Basic ZHVtbXlBcGlLZXk=', + 'Content-Type': 'application/json', + }, + version: '1', + endpoint: 'https://api.getdrip.com/v2/1809802/events', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + accountId: '1809802', + campaignId: '915194776', + enableUserCreation: true, }, + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/engage/router/data.ts b/test/integrations/destinations/engage/router/data.ts index d6a66b5e98..248deff04d 100644 --- a/test/integrations/destinations/engage/router/data.ts +++ b/test/integrations/destinations/engage/router/data.ts @@ -12,19 +12,8 @@ export const data = [ { message: { groupId: '17', - context: { - externalId: [ - { - type: 'engageId', - id: '246', - }, - ], - }, - traits: { - lastName: 'garwal', - type: 'Segments', - operation: 'remove', - }, + context: { externalId: [{ type: 'engageId', id: '246' }] }, + traits: { lastName: 'garwal', type: 'Segments', operation: 'remove' }, type: 'group', }, destination: { @@ -32,18 +21,12 @@ export const data = [ publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, ], destType: 'engage', @@ -68,14 +51,7 @@ export const data = [ 'Basic NDl1cjQ5MHJqZm8zNGdpMDR5MzhyOWdvOm44OWczODl5cjM4OWZnYmVmMHUycmZm', }, params: {}, - body: { - JSON: { - subscribed: true, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: { subscribed: true }, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, destination: { @@ -83,20 +59,12 @@ export const data = [ publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, }, @@ -120,14 +88,8 @@ export const data = [ userId: '1', context: { externalId: [ - { - type: 'engageListId', - id: '100c983ry8934hf3094yfh348gf1', - }, - { - type: 'engageListId', - id: '4r40hfio3rbfln', - }, + { type: 'engageListId', id: '100c983ry8934hf3094yfh348gf1' }, + { type: 'engageListId', id: '4r40hfio3rbfln' }, ], }, originalTimestamp: '2020-09-28T19:53:31.900Z', @@ -136,14 +98,7 @@ export const data = [ lastName: 'Rudderlabs', email: 'Test@r.com', hasPurchased: 'yes', - address: { - Home: { - city: 'iudcb', - }, - Office: { - abc: 'jbc', - }, - }, + address: { Home: { city: 'iudcb' }, Office: { abc: 'jbc' } }, state: 'Delhi', title: 'Mr', }, @@ -155,18 +110,12 @@ export const data = [ publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'engage', @@ -217,20 +166,12 @@ export const data = [ publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, }, @@ -253,11 +194,7 @@ export const data = [ message: { anonymousId: 'user123', groupId: '17', - traits: { - lastName: 'garwal', - operation: 'remove', - email: 'abc@xyz.com', - }, + traits: { lastName: 'garwal', operation: 'remove', email: 'abc@xyz.com' }, type: 'group', }, destination: { @@ -265,18 +202,12 @@ export const data = [ publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'engage', @@ -290,22 +221,14 @@ export const data = [ body: { output: [ { - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], destination: { Config: { publicKey: '49ur490rjfo34gi04y38r9go', privateKey: 'n89g389yr389fgbef0u2rff', listIds: [ - { - listId: '9834trg3rgy3g08oi9893rgfb', - }, - { - listId: 'f39487tyh49go3h093gh2if2f2', - }, + { listId: '9834trg3rgy3g08oi9893rgfb' }, + { listId: 'f39487tyh49go3h093gh2if2f2' }, ], }, }, diff --git a/test/integrations/destinations/facebook_conversions/router/data.ts b/test/integrations/destinations/facebook_conversions/router/data.ts index 1c7f316538..9c6759df61 100644 --- a/test/integrations/destinations/facebook_conversions/router/data.ts +++ b/test/integrations/destinations/facebook_conversions/router/data.ts @@ -11,9 +11,7 @@ export const data = [ body: { input: [ { - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', channel: 'web', @@ -24,74 +22,39 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, - screen: { - height: '100', - density: 50, - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + screen: { height: '100', density: 50 }, traits: { email: ' aBc@gmail.com ', - address: { - zip: 1234, - }, + address: { zip: 1234 }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', - properties: { - revenue: 400, - additional_bet_index: 0, - }, + 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, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', datasetId: 'dummyID', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], removeExternalId: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], actionSource: 'website', }, Enabled: true, }, }, { - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', channel: 'web', @@ -102,65 +65,32 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, - screen: { - height: '100', - density: 50, - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, + screen: { height: '100', density: 50 }, traits: { email: ' aBc@gmail.com ', - address: { - zip: 1234, - }, + address: { zip: 1234 }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'products searched', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', - properties: { - revenue: 400, - additional_bet_index: 0, - }, + 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, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', datasetId: 'dummyID', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], removeExternalId: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], actionSource: 'website', }, Enabled: true, @@ -197,41 +127,19 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { limitedDataUsage: true, - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', datasetId: 'dummyID', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], removeExternalId: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], actionSource: 'website', }, Enabled: true, @@ -257,41 +165,19 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { limitedDataUsage: true, - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', datasetId: 'dummyID', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], removeExternalId: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], actionSource: 'website', }, Enabled: true, diff --git a/test/integrations/destinations/facebook_offline_conversions/router/data.ts b/test/integrations/destinations/facebook_offline_conversions/router/data.ts index 7bf984a029..c91113fcae 100644 --- a/test/integrations/destinations/facebook_offline_conversions/router/data.ts +++ b/test/integrations/destinations/facebook_offline_conversions/router/data.ts @@ -19,23 +19,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.2', }, - traits: { - abc: '1234', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/tests/html/ecomm_test.html', referrer: 'http://0.0.0.0:1112/tests/html/', @@ -57,90 +47,34 @@ export const data = [ 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', - }, + { 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, - }, + metadata: { jobId: 1, userId: 'u1' }, 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', - }, + { 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', - }, + { 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, }, @@ -156,23 +90,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.2', }, - traits: { - abc: '1234', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/tests/html/ecomm_test.html', referrer: 'http://0.0.0.0:1112/tests/html/', @@ -194,86 +118,33 @@ export const data = [ 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', - }, + { 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, - }, + metadata: { jobId: 2, userId: 'u1' }, 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', - }, + { 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: '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, }, @@ -294,9 +165,7 @@ export const data = [ birthday: '2005-01-01T23:28:56.782Z', firstName: 'test', lastName: 'rudderstack', - initial: { - firstName: 'rudderlabs', - }, + initial: { firstName: 'rudderlabs' }, address: { city: 'kalkata', state: 'west bangal', @@ -306,20 +175,12 @@ export const data = [ phone: '9886775586', gender: 'male', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.2', - }, + 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/tests/html/ecomm_test.html', referrer: 'http://0.0.0.0:1112/tests/html/', @@ -327,9 +188,7 @@ export const data = [ title: 'Fb Offline Conversion Ecommerce Test', url: 'http://0.0.0.0:1112/tests/html/ecomm_test.html', }, - device: { - advertisingId: 'apple@123', - }, + device: { advertisingId: 'apple@123' }, }, type: 'track', messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', @@ -345,86 +204,33 @@ export const data = [ 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', - }, + { 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, - }, + metadata: { jobId: 3, userId: 'u1' }, 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', - }, + { 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', - }, + { 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, }, @@ -443,11 +249,7 @@ export const data = [ output: [ { error: 'Please Map Your Standard Events With Event Set Ids', - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statTags: { destType: 'FACEBOOK_OFFLINE_CONVERSIONS', @@ -463,64 +265,22 @@ export const data = [ 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', - }, + { 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', - }, + { 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, }, @@ -528,11 +288,7 @@ export const data = [ }, { error: 'Please Map Your Standard Events With Event Set Ids', - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { destType: 'FACEBOOK_OFFLINE_CONVERSIONS', errorCategory: 'dataValidation', @@ -548,79 +304,31 @@ export const data = [ 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', - }, + { 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: '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, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batchedRequest: [ { - body: { - FORM: {}, - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - }, + body: { FORM: {}, JSON: {}, JSON_ARRAY: {}, XML: {} }, endpoint: 'https://graph.facebook.com/v16.0/1148872185708962/events?upload_tag=test campaign&data=%5B%7B%22match_keys%22%3A%7B%22doby%22%3A%22f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6%22%2C%22dobm%22%3A%22f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6%22%2C%22dobd%22%3A%22f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6%22%2C%22extern_id%22%3A%22user%401%22%2C%22email%22%3A%5B%221c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd%22%5D%2C%22phone%22%3A%5B%2274a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615%22%5D%2C%22gen%22%3A%220d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf%22%2C%22ln%22%3A%227fb35d4777487797615cfa7c57724a47ba99152485600ccdb98e3871a6d05b21%22%2C%22fn%22%3A%229f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08%22%2C%22ct%22%3A%22375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0%22%2C%22zip%22%3A%5B%228d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92%22%5D%2C%22madid%22%3A%22c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67%22%2C%22client_user_agent%22%3A%22Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F83.0.4103.97%20Safari%2F537.36%22%7D%2C%22event_time%22%3A1663761919%2C%22currency%22%3A%22IND%22%2C%22value%22%3A100%2C%22order_id%22%3A%22485893487985894998%22%2C%22contents%22%3A%5B%7B%22id%22%3A%22product-bacon-jam%22%2C%22quantity%22%3A1%2C%22brand%22%3A%22%22%2C%22category%22%3A%22Merch%22%7D%2C%7B%22id%22%3A%22product-t-shirt%22%2C%22quantity%22%3A1%2C%22brand%22%3A%22Levis%22%2C%22category%22%3A%22Merch%22%7D%2C%7B%22id%22%3A%22offer-t-shirt%22%2C%22quantity%22%3A1%2C%22brand%22%3A%22Levis%22%2C%22category%22%3A%22Merch%22%7D%5D%2C%22custom_data%22%3A%7B%22extern_id%22%3A%22user%401%22%2C%22event_name%22%3A%22Cart%20Checkout%22%2C%22event_time%22%3A1663761919%2C%22currency%22%3A%22IND%22%2C%22value%22%3A100%2C%22email%22%3A%221c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd%22%2C%22phone%22%3A%2274a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615%22%2C%22gen%22%3A%220d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf%22%2C%22ln%22%3A%227fb35d4777487797615cfa7c57724a47ba99152485600ccdb98e3871a6d05b21%22%2C%22fn%22%3A%229f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08%22%2C%22ct%22%3A%22375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0%22%2C%22zip%22%3A%228d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92%22%2C%22madid%22%3A%22c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67%22%2C%22contents%22%3A%5B%7B%22id%22%3A%22product-bacon-jam%22%2C%22category%22%3A%22Merch%22%2C%22brand%22%3A%22%22%7D%2C%7B%22id%22%3A%22product-t-shirt%22%2C%22category%22%3A%22Merch%22%2C%22brand%22%3A%22Levis%22%7D%2C%7B%22id%22%3A%22offer-t-shirt%22%2C%22category%22%3A%22Merch%22%2C%22brand%22%3A%22Levis%22%7D%5D%2C%22order_id%22%3A%22485893487985894998%22%2C%22upload_tag%22%3A%22test%20campaign%22%2C%22client_user_agent%22%3A%22Mozilla%2F5.0%20(Macintosh%3B%20Intel%20Mac%20OS%20X%2010_15_3)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F83.0.4103.97%20Safari%2F537.36%22%2C%22event_source_url%22%3A%22http%3A%2F%2F0.0.0.0%3A1112%2Ftests%2Fhtml%2Fecomm_test.html%22%2C%22shipping%22%3A4%2C%22coupon%22%3A%22APPARELSALE%22%7D%2C%22event_source_url%22%3A%22http%3A%2F%2F0.0.0.0%3A1112%2Ftests%2Fhtml%2Fecomm_test.html%22%2C%22event_name%22%3A%22AddToCart%22%2C%22content_type%22%3A%22product%22%7D%5D&access_token=ABC...', files: {}, @@ -638,60 +346,21 @@ export const data = [ 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', - }, + { 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', - }, + { 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/integrations/destinations/facebook_pixel/router/data.ts b/test/integrations/destinations/facebook_pixel/router/data.ts index ee2f6968b1..4bd9914768 100644 --- a/test/integrations/destinations/facebook_pixel/router/data.ts +++ b/test/integrations/destinations/facebook_pixel/router/data.ts @@ -19,11 +19,7 @@ export const data = [ { message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - destination_props: { - Fb: { - app_id: 'RudderFbApp', - }, - }, + destination_props: { Fb: { app_id: 'RudderFbApp' } }, context: { device: { id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', @@ -31,67 +27,34 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, - screen: { - height: '100', - density: 50, - }, + 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, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', - properties: { - revenue: 400, - additional_bet_index: 0, - }, + properties: { revenue: 400, additional_bet_index: 0 }, timestamp: '2023-10-14T15:46:51.693229+05:30', type: 'track', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { limitedDataUsage: true, - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], removeExternalId: true, accessToken: '09876', pixelId: 'dummyPixelId', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], valueFieldIdentifier: '', advancedMapping: false, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], }, Enabled: true, }, @@ -114,67 +77,34 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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: 'standard plan', - name: 'rudder test', + os: { name: '', version: '' }, + screen: { density: 2 }, }, + properties: { plan: 'standard plan', name: 'rudder test' }, type: 'identify', messageId: '84e26acc-56a5-4835-8233-591137fca468', originalTimestamp: '2023-10-14T00:00:00.693229+05:30', anonymousId: '00000000000000000000000000', userId: '123456', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', pixelId: 'dummyPixelId', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], valueFieldIdentifier: '', advancedMapping: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], }, Enabled: true, }, @@ -195,7 +125,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: `https://graph.facebook.com/${VERSION}/dummyPixelId/events?access_token=09876`, + endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, body: { @@ -210,43 +140,21 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { limitedDataUsage: true, - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], removeExternalId: true, accessToken: '09876', pixelId: 'dummyPixelId', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], valueFieldIdentifier: '', advancedMapping: false, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], }, Enabled: true, }, @@ -256,7 +164,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: `https://graph.facebook.com/${VERSION}/dummyPixelId/events?access_token=09876`, + endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, body: { @@ -271,41 +179,19 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { - blacklistPiiProperties: [ - { - blacklistPiiProperties: '', - blacklistPiiHash: false, - }, - ], + blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], accessToken: '09876', pixelId: 'dummyPixelId', - eventsToEvents: [ - { - from: '', - to: '', - }, - ], - eventCustomProperties: [ - { - eventCustomProperties: '', - }, - ], + eventsToEvents: [{ from: '', to: '' }], + eventCustomProperties: [{ eventCustomProperties: '' }], valueFieldIdentifier: '', advancedMapping: true, - whitelistPiiProperties: [ - { - whitelistPiiProperties: '', - }, - ], + whitelistPiiProperties: [{ whitelistPiiProperties: '' }], }, Enabled: true, }, diff --git a/test/integrations/destinations/fb/router/data.ts b/test/integrations/destinations/fb/router/data.ts index 4daefad141..d5872c78cd 100644 --- a/test/integrations/destinations/fb/router/data.ts +++ b/test/integrations/destinations/fb/router/data.ts @@ -12,11 +12,7 @@ export const data = [ { message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - destination_props: { - Fb: { - app_id: 'RudderFbApp', - }, - }, + destination_props: { Fb: { app_id: 'RudderFbApp' } }, context: { device: { id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', @@ -25,28 +21,16 @@ export const data = [ name: 'xiaomi', type: 'Android', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, - screen: { - height: '100', - density: 50, - }, + 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: { - AM: true, - All: false, - GA: true, - }, + integrations: { AM: true, All: false, GA: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { revenue: 400, @@ -86,17 +70,7 @@ export const data = [ userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', versionSessionCount: 2, win_amount: 0, - products: [ - { - product_id: 123, - }, - { - product_id: 345, - }, - { - product_id: 567, - }, - ], + products: [{ product_id: 123 }, { product_id: 345 }, { product_id: 567 }], }, timestamp: '2019-09-01T15:46:51.693229+05:30', type: 'track', @@ -121,23 +95,13 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - appID: 'RudderFbApp', - }, - }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { Config: { appID: 'RudderFbApp' } }, }, { message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - destination_props: { - Fb: { - app_id: 'RudderFbApp', - }, - }, + destination_props: { Fb: { app_id: 'RudderFbApp' } }, context: { device: { id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', @@ -146,28 +110,16 @@ export const data = [ name: 'xiaomi', type: 'Android', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, - screen: { - height: '100', - density: 50, - }, + 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: { - AM: true, - All: false, - GA: true, - }, + integrations: { AM: true, All: false, GA: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { revenue: 400, @@ -208,17 +160,7 @@ export const data = [ userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', versionSessionCount: 2, win_amount: 0, - products: [ - { - product_id: 123, - }, - { - product_id: 345, - }, - { - product_id: 567, - }, - ], + products: [{ product_id: 123 }, { product_id: 345 }, { product_id: 567 }], }, timestamp: '2019-09-01T15:46:51.693229+05:30', type: 'track', @@ -243,14 +185,8 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - appID: 'RudderFbApp', - }, - }, + metadata: { jobId: 3, userId: 'u1' }, + destination: { Config: { appID: 'RudderFbApp' } }, }, ], destType: 'fb', @@ -263,11 +199,7 @@ export const data = [ body: { output: [ { - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', @@ -276,26 +208,14 @@ export const data = [ implementation: 'native', module: 'destination', }, - destination: { - Config: { - appID: 'RudderFbApp', - }, - }, + destination: { Config: { appID: 'RudderFbApp' } }, batched: false, statusCode: 400, error: 'If properties.revenue is present, properties.currency is required.', }, { - metadata: [ - { - jobId: 2, - }, - ], - destination: { - Config: { - appID: 'RudderFbApp', - }, - }, + metadata: [{ jobId: 3, userId: 'u1' }], + destination: { Config: { appID: 'RudderFbApp' } }, statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', diff --git a/test/integrations/destinations/fb_custom_audience/router/data.ts b/test/integrations/destinations/fb_custom_audience/router/data.ts index fd099fe33c..492b625b2d 100644 --- a/test/integrations/destinations/fb_custom_audience/router/data.ts +++ b/test/integrations/destinations/fb_custom_audience/router/data.ts @@ -51,17 +51,10 @@ export const data = [ ], }, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { accessToken: 'ABC', @@ -131,17 +124,10 @@ export const data = [ ], }, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { accessToken: 'ABC', @@ -171,9 +157,7 @@ export const data = [ IsProcessorEnabled: true, }, libraries: [], - request: { - query: {}, - }, + request: { query: {} }, }, ], destType: 'fb_custom_audience', @@ -197,10 +181,7 @@ export const data = [ access_token: 'ABC', payload: { is_raw: true, - data_source: { - type: 'UNKNOWN', - sub_type: 'ANYTHING', - }, + data_source: { type: 'UNKNOWN', sub_type: 'ANYTHING' }, schema: [ 'EMAIL', 'DOBM', @@ -231,12 +212,7 @@ export const data = [ ], }, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -249,10 +225,7 @@ export const data = [ access_token: 'ABC', payload: { is_raw: true, - data_source: { - type: 'UNKNOWN', - sub_type: 'ANYTHING', - }, + data_source: { type: 'UNKNOWN', sub_type: 'ANYTHING' }, schema: [ 'EMAIL', 'DOBM', @@ -283,20 +256,11 @@ export const data = [ ], }, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -340,9 +304,7 @@ export const data = [ access_token: 'ABC', payload: { is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, + data_source: { sub_type: 'ANYTHING' }, schema: [ 'EMAIL', 'DOBM', @@ -373,12 +335,7 @@ export const data = [ ], }, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -391,9 +348,7 @@ export const data = [ access_token: 'ABC', payload: { is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, + data_source: { sub_type: 'ANYTHING' }, schema: [ 'EMAIL', 'DOBM', @@ -424,20 +379,11 @@ export const data = [ ], }, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -494,10 +440,7 @@ export const data = [ context: { destinationFields: 'EMAIL, FN', externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-23848494844100489', - identifierType: 'EMAIL', - }, + { type: 'FB_CUSTOM_AUDIENCE-23848494844100489', identifierType: 'EMAIL' }, ], mappedToDestination: 'true', sources: { @@ -512,46 +455,16 @@ export const data = [ properties: { listData: { add: [ - { - EMAIL: 'dede@gmail.com', - FN: 'vishwa', - }, - { - EMAIL: 'fchsjjn@gmail.com', - FN: 'hskks', - }, - { - EMAIL: 'fghjnbjk@gmail.com', - FN: 'ghfry', - }, - { - EMAIL: 'gvhjkk@gmail.com', - FN: 'hbcwqe', - }, - { - EMAIL: 'qsdwert@egf.com', - FN: 'dsfds', - }, - { - EMAIL: 'ascscxsaca@com', - FN: 'scadscdvcda', - }, - { - EMAIL: 'abc@gmail.com', - FN: 'subscribed', - }, - { - EMAIL: 'ddwnkl@gmail.com', - FN: 'subscribed', - }, - { - EMAIL: 'subscribed@eewrfrd.com', - FN: 'pending', - }, - { - EMAIL: 'acsdvdf@ddfvf.com', - FN: 'pending', - }, + { EMAIL: 'dede@gmail.com', FN: 'vishwa' }, + { EMAIL: 'fchsjjn@gmail.com', FN: 'hskks' }, + { EMAIL: 'fghjnbjk@gmail.com', FN: 'ghfry' }, + { EMAIL: 'gvhjkk@gmail.com', FN: 'hbcwqe' }, + { EMAIL: 'qsdwert@egf.com', FN: 'dsfds' }, + { EMAIL: 'ascscxsaca@com', FN: 'scadscdvcda' }, + { EMAIL: 'abc@gmail.com', FN: 'subscribed' }, + { EMAIL: 'ddwnkl@gmail.com', FN: 'subscribed' }, + { EMAIL: 'subscribed@eewrfrd.com', FN: 'pending' }, + { EMAIL: 'acsdvdf@ddfvf.com', FN: 'pending' }, ], }, }, @@ -590,9 +503,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { @@ -603,10 +514,7 @@ export const data = [ event: 'Add_Audience', context: { externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-23848494844100489', - identifierType: 'EMAIL', - }, + { type: 'FB_CUSTOM_AUDIENCE-23848494844100489', identifierType: 'EMAIL' }, ], mappedToDestination: 'true', sources: { @@ -621,46 +529,16 @@ export const data = [ properties: { listData: { add: [ - { - EMAIL: 'dede@gmail.com', - FN: 'vishwa', - }, - { - EMAIL: 'fchsjjn@gmail.com', - FN: 'hskks', - }, - { - EMAIL: 'fghjnbjk@gmail.com', - FN: 'ghfry', - }, - { - EMAIL: 'gvhjkk@gmail.com', - FN: 'hbcwqe', - }, - { - EMAIL: 'qsdwert@egf.com', - FN: 'dsfds', - }, - { - EMAIL: 'ascscxsaca@com', - FN: 'scadscdvcda', - }, - { - EMAIL: 'abc@gmail.com', - FN: 'subscribed', - }, - { - EMAIL: 'ddwnkl@gmail.com', - FN: 'subscribed', - }, - { - EMAIL: 'subscribed@eewrfrd.com', - FN: 'pending', - }, - { - EMAIL: 'acsdvdf@ddfvf.com', - FN: 'pending', - }, + { EMAIL: 'dede@gmail.com', FN: 'vishwa' }, + { EMAIL: 'fchsjjn@gmail.com', FN: 'hskks' }, + { EMAIL: 'fghjnbjk@gmail.com', FN: 'ghfry' }, + { EMAIL: 'gvhjkk@gmail.com', FN: 'hbcwqe' }, + { EMAIL: 'qsdwert@egf.com', FN: 'dsfds' }, + { EMAIL: 'ascscxsaca@com', FN: 'scadscdvcda' }, + { EMAIL: 'abc@gmail.com', FN: 'subscribed' }, + { EMAIL: 'ddwnkl@gmail.com', FN: 'subscribed' }, + { EMAIL: 'subscribed@eewrfrd.com', FN: 'pending' }, + { EMAIL: 'acsdvdf@ddfvf.com', FN: 'pending' }, ], }, }, @@ -699,9 +577,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { message: { @@ -713,12 +589,7 @@ export const data = [ context: { destinationFields: 'EMAIL, DOBM, DOBD, DOBY, PHONE, GEN, FI, MADID, ZIP, ST, COUNTRY', - externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-aud1', - identifierType: 'EMAIL', - }, - ], + externalId: [{ type: 'FB_CUSTOM_AUDIENCE-aud1', identifierType: 'EMAIL' }], mappedToDestination: 'true', sources: { job_run_id: 'cgiiurt8um7k7n5dq480', @@ -26730,9 +26601,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 4, userId: 'u1' }, }, ], destType: 'fb_custom_audience', @@ -26770,20 +26639,11 @@ export const data = [ ], }, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -26854,11 +26714,7 @@ export const data = [ }, error: 'context.destinationFields is required property for events mapped to destination ', - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 400, statTags: { @@ -33399,12 +33255,7 @@ export const data = [ ], }, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, }, { @@ -39934,12 +39785,7 @@ export const data = [ ], }, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, }, { @@ -46443,12 +46289,7 @@ export const data = [ ], }, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, }, { @@ -52952,20 +52793,11 @@ export const data = [ ], }, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/freshmarketer/router/data.ts b/test/integrations/destinations/freshmarketer/router/data.ts index bffb361ba5..03690b6e27 100644 --- a/test/integrations/destinations/freshmarketer/router/data.ts +++ b/test/integrations/destinations/freshmarketer/router/data.ts @@ -1,361 +1,304 @@ export const data = [ - { - name: 'freshmarketer', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { + { + name: 'freshmarketer', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + domain: 'rudderstack-476952domain3105.myfreshworks.com', + }, + }, + metadata: { jobId: 1, userId: 'u1' }, + message: { + messageId: 'ec5481b6-a926-4d2e-b293-0b3a77c4d3be', + originalTimestamp: '2022-06-22T10:57:58Z', + anonymousId: 'ea5cfab2-3961-4d8a-8187-3d1858c99099', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + device: { + advertisingId: 'T0T0T072-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, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + os: { name: 'iOS', version: '14.4.1' }, + screen: { density: 2 }, + }, + traits: { + email: 'testuser@google.com', + first_name: 'Rk', + last_name: 'Mishra', + mobileNumber: '1-926-555-9504', + lifecycleStageId: 71010794467, + phone: '9988776655', + owner_id: '70000090119', + }, + type: 'identify', + sentAt: '2022-04-22T10:57:58Z', + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + domain: 'rudderstack-476952domain3105.myfreshworks.com', + }, + }, + metadata: { jobId: 2, userId: 'u1' }, + message: { + messageId: 'ec5481b6-a926-4d2e-b293-0b3a77c4d3be', + originalTimestamp: '2022-06-22T10:57:58Z', + anonymousId: 'ea5cfab2-3961-4d8a-8187-3d1858c99099', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + device: { + advertisingId: 'T0T0T072-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, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + os: { name: 'iOS', version: '14.4.1' }, + screen: { density: 2 }, + }, + traits: { + email: 'testuser@google.com', + first_name: 'Rk', + last_name: 'Mishra', + mobileNumber: '1-926-555-9504', + lifecycleStageId: 71010794467, + phone: '9988776655', + owner_id: '70000090119', + }, + type: 'identify', + sentAt: '2022-04-22T10:57:58Z', + }, + }, + { + destination: { + Config: { apiKey: 'dummyApiKey', domain: 'domain-rudder.myfreshworks.com' }, + }, + metadata: { jobId: 3, userId: 'u1' }, + message: { + messageId: 'sadjb-1e2r3fhgb-12bvbbj', + originalTimestamp: '2022-06-22T10:57:58Z', + anonymousId: 'ea5cfab2-3961-4d8a-8187-3d1858c99090', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + device: { + advertisingId: 'T0T0T072-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, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + locale: 'en-US', + os: { name: 'iOS', version: '14.4.1' }, + screen: { density: 2 }, + traits: { email: 'testuser@google.com' }, + }, + traits: { + groupType: 'accounts', + name: 'Mark Twain', + phone: '919191919191', + numberOfEmployees: 51, + annualRevenue: 1000, + address: 'Red Colony', + city: 'Colony', + state: 'Haryana', + }, + type: 'group', + sentAt: '2022-04-22T10:57:58Z', + }, + }, + ], + destType: 'freshmarketer', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://rudderstack-476952domain3105.myfreshworks.com/crm/sales/api/contacts/upsert', + headers: { + Authorization: 'Token token=dummyApiKey', + 'Content-Type': 'application/json', + }, + params: {}, body: { - input: [ - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "rudderstack-476952domain3105.myfreshworks.com" - } - }, - "metadata": { - "jobId": 1 - }, - "message": { - "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be", - "originalTimestamp": "2022-06-22T10:57:58Z", - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99099", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "advertisingId": "T0T0T072-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 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "locale": "en-US", - "os": { - "name": "iOS", - "version": "14.4.1" - }, - "screen": { - "density": 2 - } - }, - "traits": { - "email": "testuser@google.com", - "first_name": "Rk", - "last_name": "Mishra", - "mobileNumber": "1-926-555-9504", - "lifecycleStageId": 71010794467, - "phone": "9988776655", - "owner_id": "70000090119" - }, - "type": "identify", - "sentAt": "2022-04-22T10:57:58Z" - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "rudderstack-476952domain3105.myfreshworks.com" - } - }, - "metadata": { - "jobId": 2 - }, - "message": { - "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be", - "originalTimestamp": "2022-06-22T10:57:58Z", - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99099", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "advertisingId": "T0T0T072-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 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "locale": "en-US", - "os": { - "name": "iOS", - "version": "14.4.1" - }, - "screen": { - "density": 2 - } - }, - "traits": { - "email": "testuser@google.com", - "first_name": "Rk", - "last_name": "Mishra", - "mobileNumber": "1-926-555-9504", - "lifecycleStageId": 71010794467, - "phone": "9988776655", - "owner_id": "70000090119" - }, - "type": "identify", - "sentAt": "2022-04-22T10:57:58Z" - } - }, - { - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "domain-rudder.myfreshworks.com" - } - }, - "metadata": { - "jobId": 3 - }, - "message": { - "messageId": "sadjb-1e2r3fhgb-12bvbbj", - "originalTimestamp": "2022-06-22T10:57:58Z", - "anonymousId": "ea5cfab2-3961-4d8a-8187-3d1858c99090", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.0.0" - }, - "device": { - "advertisingId": "T0T0T072-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 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.0.0" - }, - "locale": "en-US", - "os": { - "name": "iOS", - "version": "14.4.1" - }, - "screen": { - "density": 2 - }, - "traits": { - "email": "testuser@google.com" - } - }, - "traits": { - "groupType": "accounts", - "name": "Mark Twain", - "phone": "919191919191", - "numberOfEmployees": 51, - "annualRevenue": 1000, - "address": "Red Colony", - "city": "Colony", - "state": "Haryana" - }, - "type": "group", - "sentAt": "2022-04-22T10:57:58Z" - } - } - ], - destType: 'freshmarketer', + JSON: { + contact: { + emails: 'testuser@google.com', + first_name: 'Rk', + last_name: 'Mishra', + work_number: '9988776655', + external_id: 'ea5cfab2-3961-4d8a-8187-3d1858c99099', + mobile_number: '1-926-555-9504', + created_at: '2022-06-22T10:57:58Z', + updated_at: '2022-06-22T10:57:58Z', + lifecycle_stage_id: 71010794467, + }, + unique_identifier: { emails: 'testuser@google.com' }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + domain: 'rudderstack-476952domain3105.myfreshworks.com', }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', method: 'POST', + endpoint: + 'https://rudderstack-476952domain3105.myfreshworks.com/crm/sales/api/contacts/upsert', + headers: { + Authorization: 'Token token=dummyApiKey', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + contact: { + emails: 'testuser@google.com', + first_name: 'Rk', + last_name: 'Mishra', + work_number: '9988776655', + external_id: 'ea5cfab2-3961-4d8a-8187-3d1858c99099', + mobile_number: '1-926-555-9504', + created_at: '2022-06-22T10:57:58Z', + updated_at: '2022-06-22T10:57:58Z', + lifecycle_stage_id: 71010794467, + }, + unique_identifier: { emails: 'testuser@google.com' }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + domain: 'rudderstack-476952domain3105.myfreshworks.com', + }, + }, }, - }, - output: { - response: { - status: 200, + { + batchedRequest: { body: { - output: [ + XML: {}, + FORM: {}, + JSON: { + contact: { + sales_accounts: [ { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://rudderstack-476952domain3105.myfreshworks.com/crm/sales/api/contacts/upsert", - "headers": { - "Authorization": "Token token=dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "contact": { - "emails": "testuser@google.com", - "first_name": "Rk", - "last_name": "Mishra", - "work_number": "9988776655", - "external_id": "ea5cfab2-3961-4d8a-8187-3d1858c99099", - "mobile_number": "1-926-555-9504", - "created_at": "2022-06-22T10:57:58Z", - "updated_at": "2022-06-22T10:57:58Z", - "lifecycle_stage_id": 71010794467 - }, - "unique_identifier": { - "emails": "testuser@google.com" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "rudderstack-476952domain3105.myfreshworks.com" - } - } + id: 70003771198, + name: 'div-quer', + avatar: null, + partial: true, + website: null, + is_primary: true, + last_contacted: null, + record_type_id: '71010794477', }, { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://rudderstack-476952domain3105.myfreshworks.com/crm/sales/api/contacts/upsert", - "headers": { - "Authorization": "Token token=dummyApiKey", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "contact": { - "emails": "testuser@google.com", - "first_name": "Rk", - "last_name": "Mishra", - "work_number": "9988776655", - "external_id": "ea5cfab2-3961-4d8a-8187-3d1858c99099", - "mobile_number": "1-926-555-9504", - "created_at": "2022-06-22T10:57:58Z", - "updated_at": "2022-06-22T10:57:58Z", - "lifecycle_stage_id": 71010794467 - }, - "unique_identifier": { - "emails": "testuser@google.com" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "rudderstack-476952domain3105.myfreshworks.com" - } - } + id: 70003825177, + name: 'BisleriGroup', + avatar: null, + partial: true, + website: null, + is_primary: false, + last_contacted: null, + record_type_id: '71010794477', }, - { - "batchedRequest": { - "body": { - "XML": {}, - "FORM": {}, - "JSON": { - "contact": { - "sales_accounts": [ - { - "id": 70003771198, - "name": "div-quer", - "avatar": null, - "partial": true, - "website": null, - "is_primary": true, - "last_contacted": null, - "record_type_id": "71010794477" - }, - { - "id": 70003825177, - "name": "BisleriGroup", - "avatar": null, - "partial": true, - "website": null, - "is_primary": false, - "last_contacted": null, - "record_type_id": "71010794477" - }, - { - "id": 70003771396, - "is_primary": false - } - ] - }, - "unique_identifier": { - "emails": "testuser@google.com" - } - }, - "JSON_ARRAY": {} - }, - "type": "REST", - "files": {}, - "method": "POST", - "params": {}, - "headers": { - "Content-Type": "application/json", - "Authorization": "Token token=dummyApiKey" - }, - "version": "1", - "endpoint": "https://domain-rudder.myfreshworks.com/crm/sales/api/contacts/upsert" - }, - "metadata": [ - { - "jobId": 3 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "apiKey": "dummyApiKey", - "domain": "domain-rudder.myfreshworks.com" - } - } - } - ], + { id: 70003771396, is_primary: false }, + ], + }, + unique_identifier: { emails: 'testuser@google.com' }, + }, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Token token=dummyApiKey', }, + version: '1', + endpoint: 'https://domain-rudder.myfreshworks.com/crm/sales/api/contacts/upsert', + }, + metadata: [{ jobId: 3, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { apiKey: 'dummyApiKey', domain: 'domain-rudder.myfreshworks.com' }, + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/freshsales/router/data.ts b/test/integrations/destinations/freshsales/router/data.ts index 12cbacf576..8548d337b3 100644 --- a/test/integrations/destinations/freshsales/router/data.ts +++ b/test/integrations/destinations/freshsales/router/data.ts @@ -1,185 +1,175 @@ export const data = [ - { - name: 'freshsales', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - "message": { - "context": { - "device": { - "name": "Mi", - "token": "dummyDeviceToken" - }, - "os": { - "name": "android" - }, - "traits": { - "address": { - "city": "city", - "country": "country", - "postalCode": "postalCode", - "state": "state", - "street": "street" - }, - "email": "user112@mail.com", - "firstName": "sample1", - "lastName": "user1" - } - }, - "messageId": "8184ebd7-3a19-45a3-a340-d6f449c63d27", - "originalTimestamp": "2022-08-30T11:28:48.429+05:30", - "receivedAt": "2022-08-30T11:28:43.648+05:30", - "request_ip": "[::1]", - "rudderId": "ed33ef22-569d-44b1-a6cb-063c69dca8f0", - "sentAt": "2022-08-30T11:28:48.429+05:30", - "timestamp": "2022-08-30T11:28:43.647+05:30", - "type": "identify", - "userId": "user113" - }, - "destination": { - "ID": "2E3xCNR3sae33y3AkGzuQ3ym05v", - "Name": "test", - "DestinationDefinition": { - "ID": "2E3x3AwySRvh6vXgYslvYApyFPb", - "Name": "FRESHSALES", - "DisplayName": "Freshsales", - "Config": { - "destConfig": { - "defaultConfig": ["apiKey", "domain"] - }, - "excludeKeys": [], - "includeKeys": ["apiKey", "domain"], - "saveDestinationResponse": true, - "supportedMessageTypes": ["identify", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "processor", - "transformAtV1": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "apiKey": "hrkjfergeferf", - "domain": "rudderstack-479541159204968909.myfreshworks.com" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2E3xCLWeb83vOGDh0mkN4Auei3i" - }, - "metadata": {} - } + { + name: 'freshsales', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + context: { + device: { name: 'Mi', token: 'dummyDeviceToken' }, + os: { name: 'android' }, + traits: { + address: { + city: 'city', + country: 'country', + postalCode: 'postalCode', + state: 'state', + street: 'street', + }, + email: 'user112@mail.com', + firstName: 'sample1', + lastName: 'user1', + }, + }, + messageId: '8184ebd7-3a19-45a3-a340-d6f449c63d27', + originalTimestamp: '2022-08-30T11:28:48.429+05:30', + receivedAt: '2022-08-30T11:28:43.648+05:30', + request_ip: '[::1]', + rudderId: 'ed33ef22-569d-44b1-a6cb-063c69dca8f0', + sentAt: '2022-08-30T11:28:48.429+05:30', + timestamp: '2022-08-30T11:28:43.647+05:30', + type: 'identify', + userId: 'user113', + }, + destination: { + ID: '2E3xCNR3sae33y3AkGzuQ3ym05v', + Name: 'test', + DestinationDefinition: { + ID: '2E3x3AwySRvh6vXgYslvYApyFPb', + Name: 'FRESHSALES', + DisplayName: 'Freshsales', + Config: { + destConfig: { defaultConfig: ['apiKey', 'domain'] }, + excludeKeys: [], + includeKeys: ['apiKey', 'domain'], + saveDestinationResponse: true, + supportedMessageTypes: ['identify', 'group'], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', ], - destType: 'freshsales', + transformAt: 'processor', + transformAtV1: 'processor', + }, + ResponseRules: {}, }, - method: 'POST', + Config: { + apiKey: 'hrkjfergeferf', + domain: 'rudderstack-479541159204968909.myfreshworks.com', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2E3xCLWeb83vOGDh0mkN4Auei3i', + }, + metadata: { userId: 'u1' }, }, + ], + destType: 'freshsales', }, - output: { - response: { - status: 200, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://rudderstack-479541159204968909.myfreshworks.com/crm/sales/api/contacts/upsert', + headers: { + Authorization: 'Token token=hrkjfergeferf', + 'Content-Type': 'application/json', + }, + params: {}, body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://rudderstack-479541159204968909.myfreshworks.com/crm/sales/api/contacts/upsert", - "headers": { - "Authorization": "Token token=hrkjfergeferf", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "contact": { - "emails": "user112@mail.com", - "first_name": "sample1", - "last_name": "user1", - "external_id": "user113", - "address": "street city state country postalCode", - "city": "city", - "state": "state", - "country": "country", - "zipcode": "postalCode", - "created_at": "2022-08-30T11:28:43.647+05:30", - "updated_at": "2022-08-30T11:28:43.647+05:30" - }, - "unique_identifier": { - "emails": "user112@mail.com" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [{}], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2E3xCNR3sae33y3AkGzuQ3ym05v", - "Name": "test", - "DestinationDefinition": { - "ID": "2E3x3AwySRvh6vXgYslvYApyFPb", - "Name": "FRESHSALES", - "DisplayName": "Freshsales", - "Config": { - "destConfig": { - "defaultConfig": ["apiKey", "domain"] - }, - "excludeKeys": [], - "includeKeys": ["apiKey", "domain"], - "saveDestinationResponse": true, - "supportedMessageTypes": ["identify", "group"], - "supportedSourceTypes": [ - "amp", - "android", - "cordova", - "cloud", - "flutter", - "ios", - "reactnative", - "unity", - "warehouse", - "web" - ], - "transformAt": "processor", - "transformAtV1": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "apiKey": "hrkjfergeferf", - "domain": "rudderstack-479541159204968909.myfreshworks.com" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2E3xCLWeb83vOGDh0mkN4Auei3i" - } - } + JSON: { + contact: { + emails: 'user112@mail.com', + first_name: 'sample1', + last_name: 'user1', + external_id: 'user113', + address: 'street city state country postalCode', + city: 'city', + state: 'state', + country: 'country', + zipcode: 'postalCode', + created_at: '2022-08-30T11:28:43.647+05:30', + updated_at: '2022-08-30T11:28:43.647+05:30', + }, + unique_identifier: { emails: 'user112@mail.com' }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2E3xCNR3sae33y3AkGzuQ3ym05v', + Name: 'test', + DestinationDefinition: { + ID: '2E3x3AwySRvh6vXgYslvYApyFPb', + Name: 'FRESHSALES', + DisplayName: 'Freshsales', + Config: { + destConfig: { defaultConfig: ['apiKey', 'domain'] }, + excludeKeys: [], + includeKeys: ['apiKey', 'domain'], + saveDestinationResponse: true, + supportedMessageTypes: ['identify', 'group'], + supportedSourceTypes: [ + 'amp', + 'android', + 'cordova', + 'cloud', + 'flutter', + 'ios', + 'reactnative', + 'unity', + 'warehouse', + 'web', ], + transformAt: 'processor', + transformAtV1: 'processor', + }, + ResponseRules: {}, + }, + Config: { + apiKey: 'hrkjfergeferf', + domain: 'rudderstack-479541159204968909.myfreshworks.com', }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2E3xCLWeb83vOGDh0mkN4Auei3i', + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/ga/router/data.ts b/test/integrations/destinations/ga/router/data.ts index f0c2b86377..912d5490e7 100644 --- a/test/integrations/destinations/ga/router/data.ts +++ b/test/integrations/destinations/ga/router/data.ts @@ -1,487 +1,350 @@ export const mockFns = (_) => { - // @ts-ignore - jest - .useFakeTimers() - .setSystemTime(new Date('2023-09-29')); + // @ts-ignore + jest.useFakeTimers().setSystemTime(new Date('2023-09-29')); }; export const data = [ - { - name: 'ga', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - "message": { - "channel": "web", - "context": { - "traits": { - "name": "Rudder Test" - }, - "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": "standard plan", - "name": "rudder test" - }, - "type": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T11:15:18.299Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "name", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "name", - "to": "contentGroup2" - } - ] - }, - "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": "test@rudderstack.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": { - "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": "/abc", - "referrer": "q", - "search": "", - "title": "a", - "url": "https://www.example.com/abc" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "cat1", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "prop2", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - } - ], - destType: 'ga', + { + name: 'ga', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + traits: { name: 'Rudder Test' }, + 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 }, }, - method: 'POST', + properties: { plan: 'standard plan', name: 'rudder test' }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T11:15:18.299Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { jobId: 1, userId: 'u1' }, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'name', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'name', to: 'contentGroup2' }, + ], + }, + 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: 'test@rudderstack.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: { 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: '/abc', + referrer: 'q', + search: '', + title: 'a', + url: 'https://www.example.com/abc', + }, + integrations: { All: true }, + name: 'ApplicationLoaded', + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'cat1', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'prop2', to: 'contentGroup2' }, + ], + }, + Enabled: true, + }, }, + ], + destType: 'ga', }, - output: { - response: { - status: 200, - body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://www.google-analytics.com/collect", - "headers": {}, - "params": { - "ea": "action1", - "ec": "Rudder Test", - "cd1": "Rudder Test", - "cg2": "Rudder Test", - "v": "1", - "t": "event", - "tid": "UA-165994240-1", - "ds": "web", - "an": "RudderLabs JavaScript SDK", - "av": "1.0.0", - "aiid": "com.rudderlabs.javascript", - "npa": 1, - "aip": 1, - "uid": "123456", - "cid": "00000000000000000000000000", - "ni": 1, - "uip": "0.0.0.0", - "ua": "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", - "ul": "en-US", - "qt": 124893881701, - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "name", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "name", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://www.google-analytics.com/collect", - "headers": {}, - "params": { - "v": "1", - "t": "pageview", - "tid": "UA-165994240-1", - "ds": "web", - "an": "RudderLabs JavaScript SDK", - "av": "1.0.0", - "aiid": "com.rudderlabs.javascript", - "npa": 1, - "aip": 1, - "cid": "00000000000000000000000000", - "ua": "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", - "uid": "12345", - "uip": "0.0.0.0", - "ul": "en-US", - "dh": "www.example.com", - "dl": "https://www.example.com/abc", - "dp": "%2Fabc", - "dr": "q", - "dt": "a", - "qt": 124893881701, - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "cat1", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "prop2", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - } - ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.google-analytics.com/collect', + headers: {}, + params: { + ea: 'action1', + ec: 'Rudder Test', + cd1: 'Rudder Test', + cg2: 'Rudder Test', + v: '1', + t: 'event', + tid: 'UA-165994240-1', + ds: 'web', + an: 'RudderLabs JavaScript SDK', + av: '1.0.0', + aiid: 'com.rudderlabs.javascript', + npa: 1, + aip: 1, + uid: '123456', + cid: '00000000000000000000000000', + ni: 1, + uip: '0.0.0.0', + ua: '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', + ul: 'en-US', + qt: 124893881701, + }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, + files: {}, + userId: '00000000000000000000000000', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'name', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'name', to: 'contentGroup2' }, + ], + }, + Enabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.google-analytics.com/collect', + headers: {}, + params: { + v: '1', + t: 'pageview', + tid: 'UA-165994240-1', + ds: 'web', + an: 'RudderLabs JavaScript SDK', + av: '1.0.0', + aiid: 'com.rudderlabs.javascript', + npa: 1, + aip: 1, + cid: '00000000000000000000000000', + ua: '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', + uid: '12345', + uip: '0.0.0.0', + ul: 'en-US', + dh: 'www.example.com', + dl: 'https://www.example.com/abc', + dp: '%2Fabc', + dr: 'q', + dt: 'a', + qt: 124893881701, + }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, + files: {}, + userId: '00000000000000000000000000', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'cat1', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'prop2', to: 'contentGroup2' }, + ], }, + Enabled: true, + }, }, + ], }, - } + }, + }, + }, ].map((d) => ({ ...d, mockFns })); diff --git a/test/integrations/destinations/ga360/router/data.ts b/test/integrations/destinations/ga360/router/data.ts index 15086b6b2f..e56fccaeb8 100644 --- a/test/integrations/destinations/ga360/router/data.ts +++ b/test/integrations/destinations/ga360/router/data.ts @@ -1,487 +1,350 @@ export const mockFns = (_) => { - // @ts-ignore - jest - .useFakeTimers() - .setSystemTime(new Date('2023-09-29')); + // @ts-ignore + jest.useFakeTimers().setSystemTime(new Date('2023-09-29')); }; export const data = [ - { - name: 'ga360', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - "message": { - "channel": "web", - "context": { - "traits": { - "name": "Rudder Test" - }, - "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": "standard plan", - "name": "rudder test" - }, - "type": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "00000000000000000000000000", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "name", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "name", - "to": "contentGroup2" - } - ] - }, - "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": "test@rudderstack.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": { - "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": "/abc", - "referrer": "q", - "search": "", - "title": "a", - "url": "https://www.example.com/abc" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "cat1", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "prop2", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - } - ], - destType: 'ga360', + { + name: 'ga360', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + traits: { name: 'Rudder Test' }, + 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 }, }, - method: 'POST', + properties: { plan: 'standard plan', name: 'rudder test' }, + type: 'identify', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { jobId: 1, userId: 'u1' }, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'name', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'name', to: 'contentGroup2' }, + ], + }, + 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: 'test@rudderstack.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: { 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: '/abc', + referrer: 'q', + search: '', + title: 'a', + url: 'https://www.example.com/abc', + }, + integrations: { All: true }, + name: 'ApplicationLoaded', + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'cat1', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'prop2', to: 'contentGroup2' }, + ], + }, + Enabled: true, + }, }, + ], + destType: 'ga360', }, - output: { - response: { - status: 200, - body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://www.google-analytics.com/collect", - "headers": {}, - "params": { - "ea": "action1", - "ec": "Rudder Test", - "cd1": "Rudder Test", - "cg2": "Rudder Test", - "v": "1", - "t": "event", - "tid": "UA-165994240-1", - "ds": "web", - "an": "RudderLabs JavaScript SDK", - "av": "1.0.0", - "aiid": "com.rudderlabs.javascript", - "npa": 1, - "aip": 1, - "uid": "123456", - "cid": "00000000000000000000000000", - "ni": 1, - "uip": "0.0.0.0", - "ua": "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", - "ul": "en-US", - "qt": 124901802438, - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "name", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "name", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://www.google-analytics.com/collect", - "headers": {}, - "params": { - "v": "1", - "t": "pageview", - "tid": "UA-165994240-1", - "ds": "web", - "an": "RudderLabs JavaScript SDK", - "av": "1.0.0", - "aiid": "com.rudderlabs.javascript", - "npa": 1, - "aip": 1, - "cid": "00000000000000000000000000", - "ua": "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", - "uid": "12345", - "uip": "0.0.0.0", - "ul": "en-US", - "dh": "www.example.com", - "dl": "https://www.example.com/abc", - "dp": "%2Fabc", - "dr": "q", - "dt": "a", - "qt": 124893881701, - }, - "body": { - "JSON": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {}, - "userId": "00000000000000000000000000" - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "Config": { - "trackingID": "UA-165994240-1", - "doubleClick": true, - "enhancedLinkAttribution": true, - "classic": true, - "ignoredReferrers": "", - "serverClassic": false, - "includeSearch": true, - "trackCategorizedPages": true, - "trackNamedPages": true, - "sampleRate": "100", - "siteSpeedSampleRate": "1", - "setAllMappedProps": true, - "enableServerSideIdentify": true, - "serverSideIdentifyEventCategory": "cat1", - "serverSideIdentifyEventAction": "action1", - "anonymizeIp": true, - "domain": "domain", - "enhancedEcommerce": true, - "nonInteraction": true, - "optimize": "abc123", - "sendUserId": true, - "useGoogleAmpClientId": true, - "web-useNativeSDK": true, - "dimensions": [ - { - "from": "name", - "to": "dimension1" - }, - { - "from": "custom2", - "to": "dimension2" - } - ], - "metrics": [ - { - "from": "email", - "to": "metric1" - }, - { - "from": "trait2", - "to": "metric2" - } - ], - "resetCustomDimensionsOnPage": [ - { - "resetCustomDimensionsOnPage": "abc" - }, - { - "resetCustomDimensionsOnPage": "xyz" - } - ], - "contentGroupings": [ - { - "from": "plan", - "to": "contentGroup1" - }, - { - "from": "prop2", - "to": "contentGroup2" - } - ] - }, - "Enabled": true - } - } - ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.google-analytics.com/collect', + headers: {}, + params: { + ea: 'action1', + ec: 'Rudder Test', + cd1: 'Rudder Test', + cg2: 'Rudder Test', + v: '1', + t: 'event', + tid: 'UA-165994240-1', + ds: 'web', + an: 'RudderLabs JavaScript SDK', + av: '1.0.0', + aiid: 'com.rudderlabs.javascript', + npa: 1, + aip: 1, + uid: '123456', + cid: '00000000000000000000000000', + ni: 1, + uip: '0.0.0.0', + ua: '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', + ul: 'en-US', + qt: 124901802438, + }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, + files: {}, + userId: '00000000000000000000000000', + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'name', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'name', to: 'contentGroup2' }, + ], + }, + Enabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.google-analytics.com/collect', + headers: {}, + params: { + v: '1', + t: 'pageview', + tid: 'UA-165994240-1', + ds: 'web', + an: 'RudderLabs JavaScript SDK', + av: '1.0.0', + aiid: 'com.rudderlabs.javascript', + npa: 1, + aip: 1, + cid: '00000000000000000000000000', + ua: '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', + uid: '12345', + uip: '0.0.0.0', + ul: 'en-US', + dh: 'www.example.com', + dl: 'https://www.example.com/abc', + dp: '%2Fabc', + dr: 'q', + dt: 'a', + qt: 124893881701, + }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, + files: {}, + userId: '00000000000000000000000000', + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + Config: { + trackingID: 'UA-165994240-1', + doubleClick: true, + enhancedLinkAttribution: true, + classic: true, + ignoredReferrers: '', + serverClassic: false, + includeSearch: true, + trackCategorizedPages: true, + trackNamedPages: true, + sampleRate: '100', + siteSpeedSampleRate: '1', + setAllMappedProps: true, + enableServerSideIdentify: true, + serverSideIdentifyEventCategory: 'cat1', + serverSideIdentifyEventAction: 'action1', + anonymizeIp: true, + domain: 'domain', + enhancedEcommerce: true, + nonInteraction: true, + optimize: 'abc123', + sendUserId: true, + useGoogleAmpClientId: true, + 'web-useNativeSDK': true, + dimensions: [ + { from: 'name', to: 'dimension1' }, + { from: 'custom2', to: 'dimension2' }, + ], + metrics: [ + { from: 'email', to: 'metric1' }, + { from: 'trait2', to: 'metric2' }, + ], + resetCustomDimensionsOnPage: [ + { resetCustomDimensionsOnPage: 'abc' }, + { resetCustomDimensionsOnPage: 'xyz' }, + ], + contentGroupings: [ + { from: 'plan', to: 'contentGroup1' }, + { from: 'prop2', to: 'contentGroup2' }, + ], }, + Enabled: true, + }, }, + ], }, - } + }, + }, + }, ].map((d) => ({ ...d, mockFns })); diff --git a/test/integrations/destinations/gainsight/router/data.ts b/test/integrations/destinations/gainsight/router/data.ts index d5873e8465..9550fa892b 100644 --- a/test/integrations/destinations/gainsight/router/data.ts +++ b/test/integrations/destinations/gainsight/router/data.ts @@ -1,451 +1,436 @@ export const data = [ - { - name: 'gainsight', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - "message": { - "type": "identify", - "sentAt": "2021-05-28T11:22:01.842Z", - "userId": "live-test", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "file:///Users/anurajguha/workspace/simple-html-test/index.html", - "path": "/Users/anurajguha/workspace/simple-html-test/index.html", - "title": "Test", - "search": "", - "tab_url": "file:///Users/anurajguha/workspace/simple-html-test/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "density": 2 - }, - "traits": { - "name": "Cosmo Krammer", - "email": "cosmo@krammer.com", - "location": "New York", - "emailOptOut": true, - "linkedinUrl": "https://linkedin.com/cosmo-krammer", - "masterAvatarTypeCode": 10 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" - }, - "rudderId": "94d40f2f-5787-4798-8a03-34f3b02f5ede", - "messageId": "8274e525-d99c-4f55-b67a-bbc890d1444c", - "timestamp": "2021-05-28T16:52:01.859+05:30", - "receivedAt": "2021-05-28T16:52:01.859+05:30", - "request_ip": "[::1]", - "anonymousId": "1585ea2f-dddc-4d23-935f-c1196405d61e", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-05-28T11:22:01.842Z" - }, - "metadata": { - "userId": "94d40f2f-5787-4798-8a03-34f3b02f5ede", - "jobId": 1, - "sourceId": "1syvMwC0K62eIb4yAV9kFJtbDEA", - "destinationId": "1syvZAuiGo4l1SIsil0TxDEx34G", - "attemptNum": 0, - "receivedAt": "2021-05-28T16:52:01.859+05:30", - "createdAt": "2021-05-28T11:22:02.463Z", - "firstAttemptedAt": "", - "transformAt": "router" - }, - "destination": { - "ID": "1syvZAuiGo4l1SIsil0TxDEx34G", - "Name": "gainsight-dev-dest", - "DestinationDefinition": { - "ID": "1syuhEt4I8jpvlwJc4lr1IiLjPu", - "Name": "GAINSIGHT", - "DisplayName": "Gainsight", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKey", - "sharedSecret", - "tenantId", - "domain", - "personMap", - "companyMap", - "topicName", - "eventNameMap", - "eventVersionMap", - "contractId" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKey", "sharedSecret"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "sample-access-key", - "contractId": "", - "domain": "demo-account.gainsightcloud.com", - "sharedSecret": "", - "tenantId": "", - "topicName": "" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "message": { - "type": "track", - "event": "Demo Request", - "sentAt": "2021-05-28T11:52:12.893Z", - "userId": "", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.18", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "file:///Users/anurajguha/workspace/simple-html-test/index.html", - "path": "/Users/anurajguha/workspace/simple-html-test/index.html", - "title": "Test", - "search": "", - "tab_url": "file:///Users/anurajguha/workspace/simple-html-test/index.html", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-GB", - "screen": { - "density": 2 - }, - "traits": {}, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.18" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" - }, - "rudderId": "1a30a93f-916b-4c39-ad20-1ce7bbbd7754", - "messageId": "f5619b1a-8704-42a8-bab9-92bbeaa44896", - "timestamp": "2021-05-28T17:22:12.905+05:30", - "properties": { - "email": "sample@user.com", - "status": "active" - }, - "receivedAt": "2021-05-28T17:22:12.905+05:30", - "request_ip": "[::1]", - "anonymousId": "1585ea2f-dddc-4d23-935f-c1196405d61e", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-05-28T11:52:12.893Z" - }, - "metadata": { - "userId": "1a30a93f-916b-4c39-ad20-1ce7bbbd7754", - "jobId": 2, - "sourceId": "1syvMwC0K62eIb4yAV9kFJtbDEA", - "destinationId": "1syvZAuiGo4l1SIsil0TxDEx34G", - "attemptNum": 0, - "receivedAt": "2021-05-28T17:22:12.905+05:30", - "createdAt": "2021-05-28T11:52:15.283Z", - "firstAttemptedAt": "", - "transformAt": "router" - }, - "destination": { - "ID": "1syvZAuiGo4l1SIsil0TxDEx34G", - "Name": "gainsight-dev-dest", - "DestinationDefinition": { - "ID": "1syuhEt4I8jpvlwJc4lr1IiLjPu", - "Name": "GAINSIGHT", - "DisplayName": "Gainsight", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKey", - "sharedSecret", - "tenantId", - "domain", - "personMap", - "companyMap", - "topicName", - "eventNameMap", - "eventVersionMap", - "contractId" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKey", "sharedSecret"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "sample-access-key", - "contractId": "sample-contract-id", - "domain": "demo-account.gainsightcloud.com", - "eventNameMap": [ - { - "from": "Demo Request", - "to": "Product Demo" - } - ], - "eventVersionMap": [ - { - "from": "Demo Request", - "to": "1.0.0" - } - ], - "sharedSecret": "sample-shared-secret", - "tenantId": "sample-tenant-id", - "topicName": "Support Tickets" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } + { + name: 'gainsight', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + sentAt: '2021-05-28T11:22:01.842Z', + userId: 'live-test', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'file:///Users/anurajguha/workspace/simple-html-test/index.html', + path: '/Users/anurajguha/workspace/simple-html-test/index.html', + title: 'Test', + search: '', + tab_url: 'file:///Users/anurajguha/workspace/simple-html-test/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { density: 2 }, + traits: { + name: 'Cosmo Krammer', + email: 'cosmo@krammer.com', + location: 'New York', + emailOptOut: true, + linkedinUrl: 'https://linkedin.com/cosmo-krammer', + masterAvatarTypeCode: 10, + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', + }, + rudderId: '94d40f2f-5787-4798-8a03-34f3b02f5ede', + messageId: '8274e525-d99c-4f55-b67a-bbc890d1444c', + timestamp: '2021-05-28T16:52:01.859+05:30', + receivedAt: '2021-05-28T16:52:01.859+05:30', + request_ip: '[::1]', + anonymousId: '1585ea2f-dddc-4d23-935f-c1196405d61e', + integrations: { All: true }, + originalTimestamp: '2021-05-28T11:22:01.842Z', + }, + metadata: { + userId: '94d40f2f-5787-4798-8a03-34f3b02f5ede', + jobId: 1, + sourceId: '1syvMwC0K62eIb4yAV9kFJtbDEA', + destinationId: '1syvZAuiGo4l1SIsil0TxDEx34G', + attemptNum: 0, + receivedAt: '2021-05-28T16:52:01.859+05:30', + createdAt: '2021-05-28T11:22:02.463Z', + firstAttemptedAt: '', + transformAt: 'router', + }, + destination: { + ID: '1syvZAuiGo4l1SIsil0TxDEx34G', + Name: 'gainsight-dev-dest', + DestinationDefinition: { + ID: '1syuhEt4I8jpvlwJc4lr1IiLjPu', + Name: 'GAINSIGHT', + DisplayName: 'Gainsight', + Config: { + destConfig: { + defaultConfig: [ + 'accessKey', + 'sharedSecret', + 'tenantId', + 'domain', + 'personMap', + 'companyMap', + 'topicName', + 'eventNameMap', + 'eventVersionMap', + 'contractId', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKey', 'sharedSecret'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: 'sample-access-key', + contractId: '', + domain: 'demo-account.gainsightcloud.com', + sharedSecret: '', + tenantId: '', + topicName: '', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + message: { + type: 'track', + event: 'Demo Request', + sentAt: '2021-05-28T11:52:12.893Z', + userId: '', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.18', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'file:///Users/anurajguha/workspace/simple-html-test/index.html', + path: '/Users/anurajguha/workspace/simple-html-test/index.html', + title: 'Test', + search: '', + tab_url: 'file:///Users/anurajguha/workspace/simple-html-test/index.html', + referrer: '$direct', + initial_referrer: '$direct', + referring_domain: '', + initial_referring_domain: '', + }, + locale: 'en-GB', + screen: { density: 2 }, + traits: {}, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', + }, + rudderId: '1a30a93f-916b-4c39-ad20-1ce7bbbd7754', + messageId: 'f5619b1a-8704-42a8-bab9-92bbeaa44896', + timestamp: '2021-05-28T17:22:12.905+05:30', + properties: { email: 'sample@user.com', status: 'active' }, + receivedAt: '2021-05-28T17:22:12.905+05:30', + request_ip: '[::1]', + anonymousId: '1585ea2f-dddc-4d23-935f-c1196405d61e', + integrations: { All: true }, + originalTimestamp: '2021-05-28T11:52:12.893Z', + }, + metadata: { + userId: '1a30a93f-916b-4c39-ad20-1ce7bbbd7754', + jobId: 2, + sourceId: '1syvMwC0K62eIb4yAV9kFJtbDEA', + destinationId: '1syvZAuiGo4l1SIsil0TxDEx34G', + attemptNum: 0, + receivedAt: '2021-05-28T17:22:12.905+05:30', + createdAt: '2021-05-28T11:52:15.283Z', + firstAttemptedAt: '', + transformAt: 'router', + }, + destination: { + ID: '1syvZAuiGo4l1SIsil0TxDEx34G', + Name: 'gainsight-dev-dest', + DestinationDefinition: { + ID: '1syuhEt4I8jpvlwJc4lr1IiLjPu', + Name: 'GAINSIGHT', + DisplayName: 'Gainsight', + Config: { + destConfig: { + defaultConfig: [ + 'accessKey', + 'sharedSecret', + 'tenantId', + 'domain', + 'personMap', + 'companyMap', + 'topicName', + 'eventNameMap', + 'eventVersionMap', + 'contractId', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKey', 'sharedSecret'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', ], - destType: 'gainsight', + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: 'sample-access-key', + contractId: 'sample-contract-id', + domain: 'demo-account.gainsightcloud.com', + eventNameMap: [{ from: 'Demo Request', to: 'Product Demo' }], + eventVersionMap: [{ from: 'Demo Request', to: '1.0.0' }], + sharedSecret: 'sample-shared-secret', + tenantId: 'sample-tenant-id', + topicName: 'Support Tickets', }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, }, + ], + destType: 'gainsight', }, - output: { - response: { - status: 200, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://demo-account.gainsightcloud.com/v1.0/api/people', + headers: { Accesskey: 'sample-access-key', 'Content-Type': 'application/json' }, + params: {}, + body: { + JSON: { + Email: 'cosmo@krammer.com', + Name: 'Cosmo Krammer', + LinkedinUrl: 'https://linkedin.com/cosmo-krammer', + Location: 'New York', + EmailOptOut: true, + MasterAvatarTypeCode: 10, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + userId: '94d40f2f-5787-4798-8a03-34f3b02f5ede', + jobId: 1, + sourceId: '1syvMwC0K62eIb4yAV9kFJtbDEA', + destinationId: '1syvZAuiGo4l1SIsil0TxDEx34G', + attemptNum: 0, + receivedAt: '2021-05-28T16:52:01.859+05:30', + createdAt: '2021-05-28T11:22:02.463Z', + firstAttemptedAt: '', + transformAt: 'router', + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1syvZAuiGo4l1SIsil0TxDEx34G', + Name: 'gainsight-dev-dest', + DestinationDefinition: { + ID: '1syuhEt4I8jpvlwJc4lr1IiLjPu', + Name: 'GAINSIGHT', + DisplayName: 'Gainsight', + Config: { + destConfig: { + defaultConfig: [ + 'accessKey', + 'sharedSecret', + 'tenantId', + 'domain', + 'personMap', + 'companyMap', + 'topicName', + 'eventNameMap', + 'eventVersionMap', + 'contractId', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKey', 'sharedSecret'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', + ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: 'sample-access-key', + contractId: '', + domain: 'demo-account.gainsightcloud.com', + sharedSecret: '', + tenantId: '', + topicName: '', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://demo-account.gainsightcloud.com/v1.0/api/eventManager/event', + headers: { + sharedSecret: 'sample-shared-secret', + topicName: 'Support Tickets', + tenantId: 'sample-tenant-id', + 'Content-Type': 'application/json', + eventName: 'Product Demo', + eventVersion: '1.0.0', + contractId: 'sample-contract-id', + Accesskey: 'sample-access-key', + }, + params: {}, body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://demo-account.gainsightcloud.com/v1.0/api/people", - "headers": { - "Accesskey": "sample-access-key", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "Email": "cosmo@krammer.com", - "Name": "Cosmo Krammer", - "LinkedinUrl": "https://linkedin.com/cosmo-krammer", - "Location": "New York", - "EmailOptOut": true, - "MasterAvatarTypeCode": 10 - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "userId": "94d40f2f-5787-4798-8a03-34f3b02f5ede", - "jobId": 1, - "sourceId": "1syvMwC0K62eIb4yAV9kFJtbDEA", - "destinationId": "1syvZAuiGo4l1SIsil0TxDEx34G", - "attemptNum": 0, - "receivedAt": "2021-05-28T16:52:01.859+05:30", - "createdAt": "2021-05-28T11:22:02.463Z", - "firstAttemptedAt": "", - "transformAt": "router" - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "1syvZAuiGo4l1SIsil0TxDEx34G", - "Name": "gainsight-dev-dest", - "DestinationDefinition": { - "ID": "1syuhEt4I8jpvlwJc4lr1IiLjPu", - "Name": "GAINSIGHT", - "DisplayName": "Gainsight", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKey", - "sharedSecret", - "tenantId", - "domain", - "personMap", - "companyMap", - "topicName", - "eventNameMap", - "eventVersionMap", - "contractId" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKey", "sharedSecret"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "sample-access-key", - "contractId": "", - "domain": "demo-account.gainsightcloud.com", - "sharedSecret": "", - "tenantId": "", - "topicName": "" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://demo-account.gainsightcloud.com/v1.0/api/eventManager/event", - "headers": { - "sharedSecret": "sample-shared-secret", - "topicName": "Support Tickets", - "tenantId": "sample-tenant-id", - "Content-Type": "application/json", - "eventName": "Product Demo", - "eventVersion": "1.0.0", - "contractId": "sample-contract-id", - "Accesskey": "sample-access-key" - }, - "params": {}, - "body": { - "JSON": { - "email": "sample@user.com", - "status": "active" - }, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": {} - }, - "files": {} - }, - "metadata": [ - { - "userId": "1a30a93f-916b-4c39-ad20-1ce7bbbd7754", - "jobId": 2, - "sourceId": "1syvMwC0K62eIb4yAV9kFJtbDEA", - "destinationId": "1syvZAuiGo4l1SIsil0TxDEx34G", - "attemptNum": 0, - "receivedAt": "2021-05-28T17:22:12.905+05:30", - "createdAt": "2021-05-28T11:52:15.283Z", - "firstAttemptedAt": "", - "transformAt": "router" - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "1syvZAuiGo4l1SIsil0TxDEx34G", - "Name": "gainsight-dev-dest", - "DestinationDefinition": { - "ID": "1syuhEt4I8jpvlwJc4lr1IiLjPu", - "Name": "GAINSIGHT", - "DisplayName": "Gainsight", - "Config": { - "destConfig": { - "defaultConfig": [ - "accessKey", - "sharedSecret", - "tenantId", - "domain", - "personMap", - "companyMap", - "topicName", - "eventNameMap", - "eventVersionMap", - "contractId" - ] - }, - "excludeKeys": [], - "includeKeys": [], - "saveDestinationResponse": true, - "secretKeys": ["accessKey", "sharedSecret"], - "supportedSourceTypes": ["android", "ios", "web", "unity", "amp", "cloud", "reactnative"], - "transformAt": "router", - "transformAtV1": "router" - }, - "ResponseRules": {} - }, - "Config": { - "accessKey": "sample-access-key", - "contractId": "sample-contract-id", - "domain": "demo-account.gainsightcloud.com", - "eventNameMap": [ - { - "from": "Demo Request", - "to": "Product Demo" - } - ], - "eventVersionMap": [ - { - "from": "Demo Request", - "to": "1.0.0" - } - ], - "sharedSecret": "sample-shared-secret", - "tenantId": "sample-tenant-id", - "topicName": "Support Tickets" - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - } - } + JSON: { email: 'sample@user.com', status: 'active' }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + userId: '1a30a93f-916b-4c39-ad20-1ce7bbbd7754', + jobId: 2, + sourceId: '1syvMwC0K62eIb4yAV9kFJtbDEA', + destinationId: '1syvZAuiGo4l1SIsil0TxDEx34G', + attemptNum: 0, + receivedAt: '2021-05-28T17:22:12.905+05:30', + createdAt: '2021-05-28T11:52:15.283Z', + firstAttemptedAt: '', + transformAt: 'router', + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1syvZAuiGo4l1SIsil0TxDEx34G', + Name: 'gainsight-dev-dest', + DestinationDefinition: { + ID: '1syuhEt4I8jpvlwJc4lr1IiLjPu', + Name: 'GAINSIGHT', + DisplayName: 'Gainsight', + Config: { + destConfig: { + defaultConfig: [ + 'accessKey', + 'sharedSecret', + 'tenantId', + 'domain', + 'personMap', + 'companyMap', + 'topicName', + 'eventNameMap', + 'eventVersionMap', + 'contractId', + ], + }, + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + secretKeys: ['accessKey', 'sharedSecret'], + supportedSourceTypes: [ + 'android', + 'ios', + 'web', + 'unity', + 'amp', + 'cloud', + 'reactnative', ], + transformAt: 'router', + transformAtV1: 'router', + }, + ResponseRules: {}, + }, + Config: { + accessKey: 'sample-access-key', + contractId: 'sample-contract-id', + domain: 'demo-account.gainsightcloud.com', + eventNameMap: [{ from: 'Demo Request', to: 'Product Demo' }], + eventVersionMap: [{ from: 'Demo Request', to: '1.0.0' }], + sharedSecret: 'sample-shared-secret', + tenantId: 'sample-tenant-id', + topicName: 'Support Tickets', }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, }, + ], }, + }, }, + }, ]; diff --git a/test/integrations/destinations/gainsight_px/router/data.ts b/test/integrations/destinations/gainsight_px/router/data.ts index 3b735c5b69..7dc131127d 100644 --- a/test/integrations/destinations/gainsight_px/router/data.ts +++ b/test/integrations/destinations/gainsight_px/router/data.ts @@ -16,10 +16,7 @@ export const data = [ userId: 'stanley-kubrick', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -55,10 +52,7 @@ export const data = [ countryName: 'USA', hobbyCustomField: 'Making films. Being a genius', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', @@ -69,9 +63,7 @@ export const data = [ receivedAt: '2021-06-25T14:29:52.911+05:30', request_ip: '[::1]', anonymousId: '1585ea2f-dddc-4d23-935f-c1196405d61e', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-06-25T08:59:52.891Z', }, metadata: { @@ -122,28 +114,13 @@ export const data = [ ResponseRules: {}, }, Config: { - accountAttributeMap: [ - { - from: 'cultureCustomField', - to: 'culture', - }, - ], + accountAttributeMap: [{ from: 'cultureCustomField', to: 'culture' }], apiKey: 'sample-api-key', eventDelivery: false, eventDeliveryTS: 1624472902670, - globalContextMap: [ - { - from: 'kubrickTest', - to: 'value', - }, - ], + globalContextMap: [{ from: 'kubrickTest', to: 'value' }], productTagKey: 'AP-SAMPLE-2', - userAttributeMap: [ - { - from: 'hobbyCustomField', - to: 'hobby', - }, - ], + userAttributeMap: [{ from: 'hobbyCustomField', to: 'hobby' }], }, Enabled: true, Transformations: [], @@ -158,10 +135,7 @@ export const data = [ userId: 'adifhas9734', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -194,10 +168,7 @@ export const data = [ firstname: 'test', previousCompany: 'testprevCompany2', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', @@ -207,28 +178,18 @@ export const data = [ timestamp: '2021-06-26T16:11:22.335+05:30', properties: { array: [1, 2, 3], - nested: { - json: 'test', - }, + nested: { json: 'test' }, status: 'testing', description: 'Example track call', fullyNested: [ - { - a: 1, - b: 2, - }, - { - a: 1, - b: [1, 2, 3], - }, + { a: 1, b: 2 }, + { a: 1, b: [1, 2, 3] }, ], }, receivedAt: '2021-06-26T16:11:22.335+05:30', request_ip: '[::1]', anonymousId: '1585ea2f-dddc-4d23-935f-c1196405d61e', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-06-26T10:41:22.316Z', }, metadata: { @@ -279,28 +240,13 @@ export const data = [ ResponseRules: {}, }, Config: { - accountAttributeMap: [ - { - from: 'cultureCustomField', - to: 'culture', - }, - ], + accountAttributeMap: [{ from: 'cultureCustomField', to: 'culture' }], apiKey: 'sample-api-key', eventDelivery: false, eventDeliveryTS: 1624472902670, - globalContextMap: [ - { - from: 'kubrickTest', - to: 'value', - }, - ], + globalContextMap: [{ from: 'kubrickTest', to: 'value' }], productTagKey: 'AP-SAMPLE-2', - userAttributeMap: [ - { - from: 'hobbyCustomField', - to: 'hobby', - }, - ], + userAttributeMap: [{ from: 'hobbyCustomField', to: 'hobby' }], }, Enabled: true, Transformations: [], @@ -334,15 +280,10 @@ export const data = [ gender: 'MALE', title: 'Director/Film Maker', score: 100, - location: { - countryName: 'USA', - countryCode: 'US', - }, + location: { countryName: 'USA', countryCode: 'US' }, firstName: 'Stanley', lastName: 'Kubrick', - customAttributes: { - hobby: 'Making films. Being a genius', - }, + customAttributes: { hobby: 'Making films. Being a genius' }, propertyKeys: ['AP-SAMPLE-2'], type: 'USER', }, @@ -404,28 +345,13 @@ export const data = [ ResponseRules: {}, }, Config: { - accountAttributeMap: [ - { - from: 'cultureCustomField', - to: 'culture', - }, - ], + accountAttributeMap: [{ from: 'cultureCustomField', to: 'culture' }], apiKey: 'sample-api-key', eventDelivery: false, eventDeliveryTS: 1624472902670, - globalContextMap: [ - { - from: 'kubrickTest', - to: 'value', - }, - ], + globalContextMap: [{ from: 'kubrickTest', to: 'value' }], productTagKey: 'AP-SAMPLE-2', - userAttributeMap: [ - { - from: 'hobbyCustomField', - to: 'hobby', - }, - ], + userAttributeMap: [{ from: 'hobbyCustomField', to: 'hobby' }], }, Enabled: true, Transformations: [], @@ -459,9 +385,7 @@ export const data = [ referrer: '$direct', propertyKey: 'AP-SAMPLE-2', userType: 'USER', - globalContext: { - kubrickTest: 'value', - }, + globalContext: { kubrickTest: 'value' }, }, XML: {}, JSON_ARRAY: {}, @@ -521,28 +445,13 @@ export const data = [ ResponseRules: {}, }, Config: { - accountAttributeMap: [ - { - from: 'cultureCustomField', - to: 'culture', - }, - ], + accountAttributeMap: [{ from: 'cultureCustomField', to: 'culture' }], apiKey: 'sample-api-key', eventDelivery: false, eventDeliveryTS: 1624472902670, - globalContextMap: [ - { - from: 'kubrickTest', - to: 'value', - }, - ], + globalContextMap: [{ from: 'kubrickTest', to: 'value' }], productTagKey: 'AP-SAMPLE-2', - userAttributeMap: [ - { - from: 'hobbyCustomField', - to: 'hobby', - }, - ], + userAttributeMap: [{ from: 'hobbyCustomField', to: 'hobby' }], }, Enabled: true, Transformations: [], diff --git a/test/integrations/destinations/gladly/router/data.ts b/test/integrations/destinations/gladly/router/data.ts index 413c92e247..462edd9772 100644 --- a/test/integrations/destinations/gladly/router/data.ts +++ b/test/integrations/destinations/gladly/router/data.ts @@ -22,32 +22,21 @@ export const data = [ lastName: 'Rudderlabs', address: 'california usa', }, - externalId: [ - { - id: 'user@1', - type: 'GladlyCustomerId', - }, - ], + externalId: [{ id: 'user@1', type: 'GladlyCustomerId' }], }, type: 'identify', originalTimestamp: '2023-11-10T14:42:44.724Z', timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { message: { @@ -62,32 +51,21 @@ export const data = [ lastName: 'Rudderstack', address: 'New York, USA', }, - externalId: [ - { - id: 'user@2', - type: 'GladlyCustomerId', - }, - ], + externalId: [{ id: 'user@2', type: 'GladlyCustomerId' }], }, type: 'identify', originalTimestamp: '2023-11-10T14:42:44.724Z', timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { @@ -100,32 +78,21 @@ export const data = [ lastName: 'Rudderstack', address: 'New York, USA', }, - externalId: [ - { - id: 'user@3', - type: 'GladlyCustomerId', - }, - ], + externalId: [{ id: 'user@3', type: 'GladlyCustomerId' }], }, type: 'identify', originalTimestamp: '2023-11-10T14:42:44.724Z', timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'gladly', @@ -145,21 +112,11 @@ export const data = [ FORM: {}, JSON: { address: 'california usa', - customAttributes: { - age: 23, - }, - emails: [ - { - original: 'test@rudderlabs.com', - }, - ], + customAttributes: { age: 23 }, + emails: [{ original: 'test@rudderlabs.com' }], externalCustomerId: 'externalCustomer@1', id: 'user@1', - phones: [ - { - original: '+91 9999999999', - }, - ], + phones: [{ original: '+91 9999999999' }], }, JSON_ARRAY: {}, XML: {}, @@ -181,17 +138,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { @@ -201,20 +150,10 @@ export const data = [ FORM: {}, JSON: { address: 'New York, USA', - customAttributes: { - age: 23, - }, - emails: [ - { - original: 'test+2@rudderlabs.com', - }, - ], + customAttributes: { age: 23 }, + emails: [{ original: 'test+2@rudderlabs.com' }], externalCustomerId: 'externalCustomer@2', - phones: [ - { - original: '+91 9999999998', - }, - ], + phones: [{ original: '+91 9999999998' }], }, JSON_ARRAY: {}, XML: {}, @@ -236,17 +175,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, { @@ -257,11 +188,7 @@ export const data = [ JSON: { address: 'New York, USA', externalCustomerId: 'externalCustomer@3', - phones: [ - { - original: '+91 9999999988', - }, - ], + phones: [{ original: '+91 9999999988' }], }, JSON_ARRAY: {}, XML: {}, @@ -283,17 +210,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, ], @@ -316,12 +235,7 @@ export const data = [ userId: 'externalCustomer@1', channel: 'web', context: { - externalId: [ - { - id: 'externalCustomer@1', - identifierType: 'externalCustomerId', - }, - ], + externalId: [{ id: 'externalCustomer@1', identifierType: 'externalCustomerId' }], mappedToDestination: true, }, traits: { @@ -337,32 +251,21 @@ export const data = [ timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { message: { userId: 'externalCustomer@2', channel: 'web', context: { - externalId: [ - { - id: 'externalCustomer@2', - identifierType: 'externalCustomerId', - }, - ], + externalId: [{ id: 'externalCustomer@2', identifierType: 'externalCustomerId' }], mappedToDestination: true, }, traits: { @@ -378,32 +281,21 @@ export const data = [ timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { userId: 'externalCustomer@3', channel: 'web', context: { - externalId: [ - { - id: 'externalCustomer@3', - identifierType: 'externalCustomerId', - }, - ], + externalId: [{ id: 'externalCustomer@3', identifierType: 'externalCustomerId' }], mappedToDestination: true, }, traits: { @@ -418,20 +310,14 @@ export const data = [ timestamp: '2023-11-22T10:12:44.75705:30', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { apiToken: 'testApiToken', userName: 'testUserName', domain: 'rudderlabs.us-uat.gladly.qa', }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'gladly', @@ -451,18 +337,10 @@ export const data = [ FORM: {}, JSON: { address: 'california usa', - emails: [ - { - original: 'test@rudderlabs.com', - }, - ], + emails: [{ original: 'test@rudderlabs.com' }], externalCustomerId: 'externalCustomer@1', id: 'user@1', - phones: [ - { - original: '+91 9999999999', - }, - ], + phones: [{ original: '+91 9999999999' }], }, JSON_ARRAY: {}, XML: {}, @@ -484,17 +362,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { @@ -504,17 +374,9 @@ export const data = [ FORM: {}, JSON: { address: 'New York, USA', - emails: [ - { - original: 'test+2@rudderlabs.com', - }, - ], + emails: [{ original: 'test+2@rudderlabs.com' }], externalCustomerId: 'externalCustomer@2', - phones: [ - { - original: '+91 9999999998', - }, - ], + phones: [{ original: '+91 9999999998' }], }, JSON_ARRAY: {}, XML: {}, @@ -536,17 +398,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, { @@ -557,11 +411,7 @@ export const data = [ JSON: { address: 'New York, USA', externalCustomerId: 'externalCustomer@3', - phones: [ - { - original: '+91 9999999988', - }, - ], + phones: [{ original: '+91 9999999988' }], }, JSON_ARRAY: {}, XML: {}, @@ -583,17 +433,9 @@ export const data = [ domain: 'rudderlabs.us-uat.gladly.qa', userName: 'testUserName', }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, ], diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts index 4153630323..62ee03c46d 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts @@ -17,6 +17,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 1, + userId: 'u1', }, destination: { Config: { @@ -25,12 +26,8 @@ export const data = [ subAccount: true, loginCustomerId: '11', listOfConversions: [ - { - conversions: 'Page View', - }, - { - conversions: 'Product Added', - }, + { conversions: 'Page View' }, + { conversions: 'Product Added' }, ], authStatus: 'active', }, @@ -52,21 +49,13 @@ export const data = [ state: 'UK', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Page View', type: 'track', @@ -110,9 +99,7 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -125,6 +112,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, destination: { Config: { @@ -133,21 +121,15 @@ export const data = [ subAccount: true, loginCustomerId: '', listOfConversions: [ - { - conversions: 'Page View', - }, - { - conversions: 'Product Added', - }, + { conversions: 'Page View' }, + { conversions: 'Product Added' }, ], authStatus: 'active', }, }, message: { type: 'identify', - traits: { - status: 'elizabeth', - }, + traits: { status: 'elizabeth' }, userId: 'emrichardson820+22822@gmail.com', channel: 'sources', context: { @@ -174,10 +156,7 @@ export const data = [ }, }, { - metadata: { - secret: {}, - jobId: 3, - }, + metadata: { secret: {}, jobId: 3, userId: 'u1' }, destination: { Config: { rudderAccountId: '25u5whFH7gVTnCiAjn4ykoCLGoC', @@ -185,12 +164,8 @@ export const data = [ subAccount: true, loginCustomerId: '11', listOfConversions: [ - { - conversions: 'Page View', - }, - { - conversions: 'Product Added', - }, + { conversions: 'Page View' }, + { conversions: 'Product Added' }, ], authStatus: 'active', }, @@ -212,21 +187,13 @@ export const data = [ state: 'UK', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Page View', type: 'track', @@ -270,9 +237,7 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -311,10 +276,7 @@ export const data = [ gclid: 'gclid1234', conversionDateTime: '2022-01-01 12:32:45-08:00', }, - restatementValue: { - adjustedValue: 10, - currencyCode: 'INR', - }, + restatementValue: { adjustedValue: 10, currencyCode: 'INR' }, orderId: '10000', adjustmentDateTime: '2022-01-01 12:32:45-08:00', userAgent: @@ -355,6 +317,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 1, + userId: 'u1', }, ], batched: false, @@ -382,6 +345,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, ], destination: { @@ -391,12 +355,8 @@ export const data = [ subAccount: true, loginCustomerId: '', listOfConversions: [ - { - conversions: 'Page View', - }, - { - conversions: 'Product Added', - }, + { conversions: 'Page View' }, + { conversions: 'Product Added' }, ], authStatus: 'active', }, @@ -414,12 +374,7 @@ export const data = [ }, }, { - metadata: [ - { - secret: {}, - jobId: 3, - }, - ], + metadata: [{ secret: {}, jobId: 3, userId: 'u1' }], destination: { Config: { rudderAccountId: '25u5whFH7gVTnCiAjn4ykoCLGoC', @@ -427,12 +382,8 @@ export const data = [ subAccount: true, loginCustomerId: '11', listOfConversions: [ - { - conversions: 'Page View', - }, - { - conversions: 'Product Added', - }, + { conversions: 'Page View' }, + { conversions: 'Product Added' }, ], authStatus: 'active', }, diff --git a/test/integrations/destinations/google_adwords_offline_conversions/router/data.ts b/test/integrations/destinations/google_adwords_offline_conversions/router/data.ts index c5d2f2f524..1536af8187 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/router/data.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/router/data.ts @@ -41,21 +41,13 @@ export const data = [ postalCode: 'EC3M', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Promotion Clicked', type: 'track', @@ -94,9 +86,7 @@ export const data = [ conversionValue: '1', currency: 'GBP', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -106,55 +96,26 @@ export const data = [ refresh_token: 'efgh5678', developer_token: 'ijkl91011', }, + userId: 'u1', }, destination: { Config: { customerId: '962-581-2972', eventsToOfflineConversionsTypeMapping: [ - { - from: 'Sign up completed', - to: 'click', - }, - { - from: 'Download', - to: 'call', - }, - { - from: 'Promotion Clicked', - to: 'click', - }, - { - from: 'Product Searched', - to: 'call', - }, + { from: 'Sign up completed', to: 'click' }, + { from: 'Download', to: 'call' }, + { from: 'Promotion Clicked', to: 'click' }, + { from: 'Product Searched', to: 'call' }, ], eventsToConversionsNamesMapping: [ - { - from: 'Sign up completed', - to: 'Sign-up - click', - }, - { - from: 'Download', - to: 'Page view', - }, - { - from: 'Promotion Clicked', - to: 'Sign-up - click', - }, - { - from: 'Product Searched', - to: 'search', - }, + { from: 'Sign up completed', to: 'Sign-up - click' }, + { from: 'Download', to: 'Page view' }, + { from: 'Promotion Clicked', to: 'Sign-up - click' }, + { from: 'Product Searched', to: 'search' }, ], customVariables: [ - { - from: 'value', - to: 'revenue', - }, - { - from: 'total', - to: 'cost', - }, + { from: 'value', to: 'revenue' }, + { from: 'total', to: 'cost' }, ], UserIdentifierSource: 'THIRD_PARTY', conversionEnvironment: 'WEB', @@ -195,21 +156,13 @@ export const data = [ postalCode: 'EC3M', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'Product Searched', type: 'track', @@ -240,19 +193,15 @@ export const data = [ userIdentifierSource: 'FIRST_PARTY', conversionEnvironment: 'WEB', gclid: 'gclid', - conversionCustomVariable: 'conversionCustomVariable', value: 'value', - callerId: 'callerId', callStartDateTime: '2022-08-28 15:01:30+05:30', conversionDateTime: '2022-01-01 12:32:45-08:00', conversionValue: '1', currency: 'GBP', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -262,55 +211,26 @@ export const data = [ refresh_token: 'efgh5678', developer_token: 'ijkl91011', }, + userId: 'u1', }, destination: { Config: { customerId: '962-581-2972', eventsToOfflineConversionsTypeMapping: [ - { - from: 'Sign up completed', - to: 'click', - }, - { - from: 'Download', - to: 'call', - }, - { - from: 'Promotion Clicked', - to: 'click', - }, - { - from: 'Product Searched', - to: 'call', - }, + { from: 'Sign up completed', to: 'click' }, + { from: 'Download', to: 'call' }, + { from: 'Promotion Clicked', to: 'click' }, + { from: 'Product Searched', to: 'call' }, ], eventsToConversionsNamesMapping: [ - { - from: 'Sign up completed', - to: 'Sign-up - click', - }, - { - from: 'Download', - to: 'Page view', - }, - { - from: 'Promotion Clicked', - to: 'Sign-up - click', - }, - { - from: 'Product Searched', - to: 'search', - }, + { from: 'Sign up completed', to: 'Sign-up - click' }, + { from: 'Download', to: 'Page view' }, + { from: 'Promotion Clicked', to: 'Sign-up - click' }, + { from: 'Product Searched', to: 'search' }, ], customVariables: [ - { - from: 'value', - to: 'revenue', - }, - { - from: 'total', - to: 'cost', - }, + { from: 'value', to: 'revenue' }, + { from: 'total', to: 'cost' }, ], UserIdentifierSource: 'THIRD_PARTY', conversionEnvironment: 'WEB', @@ -324,11 +244,7 @@ export const data = [ { message: { channel: 'web', - context: { - traits: { - firstName: 'John', - }, - }, + context: { traits: { firstName: 'John' } }, event: 'Product Clicked', type: 'track', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -348,9 +264,7 @@ export const data = [ callerId: '1234', callStartDateTime: '2019-10-14T11:15:18.299Z', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -361,6 +275,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 1, + userId: 'u1', }, destination: { Config: { @@ -405,11 +320,7 @@ export const data = [ { message: { channel: 'web', - context: { - traits: { - firstName: 'John', - }, - }, + context: { traits: { firstName: 'John' } }, event: 'Order Completed', type: 'track', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -429,9 +340,7 @@ export const data = [ callerId: '1234', callStartDateTime: '2019-10-14T11:15:18.299Z', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -442,6 +351,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, destination: { Config: { @@ -486,11 +396,7 @@ export const data = [ { message: { channel: 'web', - context: { - traits: { - firstName: 'John', - }, - }, + context: { traits: { firstName: 'John' } }, event: 'Order Completed', type: 'track', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -510,9 +416,7 @@ export const data = [ callerId: '1234', callStartDateTime: '2019-10-14T11:15:18.299Z', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, @@ -523,6 +427,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 3, + userId: 'u1', }, destination: { Config: { @@ -656,6 +561,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 1, + userId: 'u1', }, { secret: { @@ -664,6 +570,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, ], batched: true, @@ -807,6 +714,7 @@ export const data = [ refresh_token: 'efgh5678', developer_token: 'ijkl91011', }, + userId: 'u1', }, ], batched: false, @@ -916,6 +824,7 @@ export const data = [ refresh_token: 'efgh5678', developer_token: 'ijkl91011', }, + userId: 'u1', }, ], batched: false, @@ -1005,6 +914,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 2, + userId: 'u1', }, ], batched: false, @@ -1058,6 +968,7 @@ export const data = [ developer_token: 'ijkl91011', }, jobId: 3, + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts index c60e32aaf6..8c12225400 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts @@ -17,6 +17,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 1, + userId: 'u1', }, destination: { Config: { @@ -50,12 +51,7 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -67,6 +63,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 2, + userId: 'u1', }, destination: { Config: { @@ -101,12 +98,7 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -118,6 +110,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 3, + userId: 'u1', }, destination: { Config: { @@ -151,12 +144,7 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -168,6 +156,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 4, + userId: 'u1', }, destination: { Config: { @@ -211,12 +200,7 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -290,6 +274,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 1, + userId: 'u1', }, ], batched: false, @@ -325,15 +310,7 @@ export const data = [ JSON: { enablePartialFailure: true, operations: [ - { - create: { - userIdentifiers: [ - { - thirdPartyUserId: 'useri1234', - }, - ], - }, - }, + { create: { userIdentifiers: [{ thirdPartyUserId: 'useri1234' }] } }, ], }, JSON_ARRAY: {}, @@ -351,6 +328,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 2, + userId: 'u1', }, ], batched: false, @@ -427,6 +405,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 3, + userId: 'u1', }, ], batched: false, @@ -551,6 +530,7 @@ export const data = [ developer_token: 'ijkl9101', }, jobId: 4, + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/google_cloud_function/router/data.ts b/test/integrations/destinations/google_cloud_function/router/data.ts index 0661d4cb15..50a559e27c 100644 --- a/test/integrations/destinations/google_cloud_function/router/data.ts +++ b/test/integrations/destinations/google_cloud_function/router/data.ts @@ -20,9 +20,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '1', - }, + metadata: { jobId: '1', userId: 'u1' }, message: { channel: 'web', context: { @@ -32,21 +30,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -61,9 +51,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -77,9 +65,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '2', - }, + metadata: { jobId: '2', userId: 'u1' }, message: { channel: 'web', context: { @@ -89,21 +75,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -118,9 +96,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -135,9 +111,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '3', - }, + metadata: { jobId: '3', userId: 'u1' }, message: { channel: 'web', context: { @@ -147,21 +121,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -176,9 +142,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -204,21 +168,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -233,9 +189,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, { @@ -247,21 +201,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -276,13 +222,14 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, ], - metadata: [{ jobId: '1' }, { jobId: '3' }], + metadata: [ + { jobId: '1', userId: 'u1' }, + { jobId: '3', userId: 'u1' }, + ], batched: true, statusCode: 200, destination: { @@ -306,7 +253,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: [{ jobId: '2' }], + metadata: [{ jobId: '2', userId: 'u1' }], batched: false, statusCode: 400, error: '[GCF]:: Url not found. Aborting', @@ -345,9 +292,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '1', - }, + metadata: { jobId: '1', userId: 'u1' }, message: { channel: 'web', context: { @@ -357,21 +302,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -386,9 +323,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -402,9 +337,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '2', - }, + metadata: { jobId: '2', userId: 'u1' }, message: { channel: 'web', context: { @@ -414,21 +347,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -443,9 +368,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -460,9 +383,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: { - jobId: '3', - }, + metadata: { jobId: '3', userId: 'u1' }, message: { channel: 'web', context: { @@ -472,21 +393,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -501,9 +414,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -529,21 +440,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -558,9 +461,7 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, { @@ -572,21 +473,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -601,13 +494,14 @@ export const data = [ emailOptOut: true, masterAvatarTypeCode: 10, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, ], - metadata: [{ jobId: '1' }, { jobId: '3' }], + metadata: [ + { jobId: '1', userId: 'u1' }, + { jobId: '3', userId: 'u1' }, + ], batched: true, statusCode: 200, destination: { @@ -631,7 +525,7 @@ export const data = [ maxBatchSize: '2', }, }, - metadata: [{ jobId: '2' }], + metadata: [{ jobId: '2', userId: 'u1' }], batched: false, statusCode: 400, error: '[GCF]:: Url not found. Aborting', diff --git a/test/integrations/destinations/googlesheets/router/data.ts b/test/integrations/destinations/googlesheets/router/data.ts index 20fe270e5f..bdc686efda 100644 --- a/test/integrations/destinations/googlesheets/router/data.ts +++ b/test/integrations/destinations/googlesheets/router/data.ts @@ -14,62 +14,20 @@ export const data = [ Config: { credentials: '{ sheets credentials }', eventKeyMap: [ - { - from: 'firstName', - to: 'First Name', - }, - { - from: 'lastName', - to: 'Last Name', - }, - { - from: 'birthday', - to: 'Birthday', - }, - { - from: 'address.city', - to: 'City', - }, - { - from: 'address.country', - to: 'Country', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'offer', - to: 'Offer', - }, - { - from: 'title', - to: 'Title Page', - }, - { - from: 'Cart Value', - to: 'Cart Value', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'context.app.build', - to: 'App Build', - }, - { - from: 'context.app.name', - to: 'App Name', - }, - { - from: 'context.library.name', - to: 'Library Name', - }, - { - from: 'context.ip', - to: 'IP', - }, + { from: 'firstName', to: 'First Name' }, + { from: 'lastName', to: 'Last Name' }, + { from: 'birthday', to: 'Birthday' }, + { from: 'address.city', to: 'City' }, + { from: 'address.country', to: 'Country' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'offer', to: 'Offer' }, + { from: 'title', to: 'Title Page' }, + { from: 'Cart Value', to: 'Cart Value' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'context.app.build', to: 'App Build' }, + { from: 'context.app.name', to: 'App Name' }, + { from: 'context.library.name', to: 'Library Name' }, + { from: 'context.ip', to: 'IP' }, ], sheetId: 'rudder_sheet_id', sheetName: 'rudder_sheet', @@ -121,10 +79,7 @@ export const data = [ married: true, customerType: 'Prime', custom_tags: ['Test_User', 'Interested_User', 'DIY_Hobby'], - custom_mappings: { - Office: 'Trastkiv', - Country: 'Russia', - }, + custom_mappings: { Office: 'Trastkiv', Country: 'Russia' }, address: { city: 'kolkata', country: 'India', @@ -136,71 +91,27 @@ export const data = [ integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { destination: { Config: { credentials: '{ sheets credentials }', eventKeyMap: [ - { - from: 'firstName', - to: 'First Name', - }, - { - from: 'lastName', - to: 'Last Name', - }, - { - from: 'birthday', - to: 'Birthday', - }, - { - from: 'address.city', - to: 'City', - }, - { - from: 'address.country', - to: 'Country', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'offer', - to: 'Offer', - }, - { - from: 'title', - to: 'Title Page', - }, - { - from: 'Cart Value', - to: 'Cart Value', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'context.app.build', - to: 'App Build', - }, - { - from: 'context.app.name', - to: 'App Name', - }, - { - from: 'context.library.name', - to: 'Library Name', - }, - { - from: 'context.ip', - to: 'IP', - }, + { from: 'firstName', to: 'First Name' }, + { from: 'lastName', to: 'Last Name' }, + { from: 'birthday', to: 'Birthday' }, + { from: 'address.city', to: 'City' }, + { from: 'address.country', to: 'Country' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'offer', to: 'Offer' }, + { from: 'title', to: 'Title Page' }, + { from: 'Cart Value', to: 'Cart Value' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'context.app.build', to: 'App Build' }, + { from: 'context.app.name', to: 'App Name' }, + { from: 'context.library.name', to: 'Library Name' }, + { from: 'context.ip', to: 'IP' }, ], sheetId: 'rudder_sheet_id', sheetName: 'rudder_sheet', @@ -232,26 +143,16 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '0.1.4', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, locale: 'en-US', - network: { - carrier: 'Android', - bluetooth: false, - cellular: true, - wifi: true, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, os: { name: 'Android', version: '9' }, screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'googlesheets', @@ -272,50 +173,17 @@ export const data = [ attributeKey: 'messageId', attributeValue: '84e26acc-56a5-4835-8233-591137fca468', }, - '1': { - attributeKey: 'First Name', - attributeValue: 'James', - }, - '2': { - attributeKey: 'Last Name', - attributeValue: 'Doe', - }, - '3': { - attributeKey: 'Birthday', - attributeValue: '1614775793', - }, - '4': { - attributeKey: 'City', - attributeValue: 'kolkata', - }, - '5': { - attributeKey: 'Country', - attributeValue: 'India', - }, - '6': { - attributeKey: 'Revenue', - attributeValue: '', - }, - '7': { - attributeKey: 'Offer', - attributeValue: '', - }, - '8': { - attributeKey: 'Title Page', - attributeValue: '', - }, - '9': { - attributeKey: 'Cart Value', - attributeValue: '', - }, - '10': { - attributeKey: 'Revenue', - attributeValue: '', - }, - '11': { - attributeKey: 'App Build', - attributeValue: '1.0.0', - }, + '1': { attributeKey: 'First Name', attributeValue: 'James' }, + '2': { attributeKey: 'Last Name', attributeValue: 'Doe' }, + '3': { attributeKey: 'Birthday', attributeValue: '1614775793' }, + '4': { attributeKey: 'City', attributeValue: 'kolkata' }, + '5': { attributeKey: 'Country', attributeValue: 'India' }, + '6': { attributeKey: 'Revenue', attributeValue: '' }, + '7': { attributeKey: 'Offer', attributeValue: '' }, + '8': { attributeKey: 'Title Page', attributeValue: '' }, + '9': { attributeKey: 'Cart Value', attributeValue: '' }, + '10': { attributeKey: 'Revenue', attributeValue: '' }, + '11': { attributeKey: 'App Build', attributeValue: '1.0.0' }, '12': { attributeKey: 'App Name', attributeValue: 'RudderLabs JavaScript SDK', @@ -324,74 +192,29 @@ export const data = [ attributeKey: 'Library Name', attributeValue: 'RudderLabs JavaScript SDK', }, - '14': { - attributeKey: 'IP', - attributeValue: '0.0.0.0', - }, + '14': { attributeKey: 'IP', attributeValue: '0.0.0.0' }, }, }, { message: { - '0': { - attributeKey: 'messageId', - attributeValue: '', - }, - '1': { - attributeKey: 'First Name', - attributeValue: '', - }, - '2': { - attributeKey: 'Last Name', - attributeValue: '', - }, - '3': { - attributeKey: 'Birthday', - attributeValue: '', - }, - '4': { - attributeKey: 'City', - attributeValue: '', - }, - '5': { - attributeKey: 'Country', - attributeValue: '', - }, - '6': { - attributeKey: 'Revenue', - attributeValue: 5.99, - }, - '7': { - attributeKey: 'Offer', - attributeValue: 'Discount', - }, - '8': { - attributeKey: 'Title Page', - attributeValue: '', - }, - '9': { - attributeKey: 'Cart Value', - attributeValue: '', - }, - '10': { - attributeKey: 'Revenue', - attributeValue: 5.99, - }, - '11': { - attributeKey: 'App Build', - attributeValue: '1', - }, - '12': { - attributeKey: 'App Name', - attributeValue: 'RudderAndroidClient', - }, + '0': { attributeKey: 'messageId', attributeValue: '' }, + '1': { attributeKey: 'First Name', attributeValue: '' }, + '2': { attributeKey: 'Last Name', attributeValue: '' }, + '3': { attributeKey: 'Birthday', attributeValue: '' }, + '4': { attributeKey: 'City', attributeValue: '' }, + '5': { attributeKey: 'Country', attributeValue: '' }, + '6': { attributeKey: 'Revenue', attributeValue: 5.99 }, + '7': { attributeKey: 'Offer', attributeValue: 'Discount' }, + '8': { attributeKey: 'Title Page', attributeValue: '' }, + '9': { attributeKey: 'Cart Value', attributeValue: '' }, + '10': { attributeKey: 'Revenue', attributeValue: 5.99 }, + '11': { attributeKey: 'App Build', attributeValue: '1' }, + '12': { attributeKey: 'App Name', attributeValue: 'RudderAndroidClient' }, '13': { attributeKey: 'Library Name', attributeValue: 'com.rudderstack.android.sdk.core', }, - '14': { - attributeKey: 'IP', - attributeValue: '14.5.67.21', - }, + '14': { attributeKey: 'IP', attributeValue: '14.5.67.21' }, }, }, ], @@ -399,12 +222,8 @@ export const data = [ spreadSheet: 'rudder_sheet', }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -412,62 +231,20 @@ export const data = [ Config: { credentials: '{ sheets credentials }', eventKeyMap: [ - { - from: 'firstName', - to: 'First Name', - }, - { - from: 'lastName', - to: 'Last Name', - }, - { - from: 'birthday', - to: 'Birthday', - }, - { - from: 'address.city', - to: 'City', - }, - { - from: 'address.country', - to: 'Country', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'offer', - to: 'Offer', - }, - { - from: 'title', - to: 'Title Page', - }, - { - from: 'Cart Value', - to: 'Cart Value', - }, - { - from: 'revenue', - to: 'Revenue', - }, - { - from: 'context.app.build', - to: 'App Build', - }, - { - from: 'context.app.name', - to: 'App Name', - }, - { - from: 'context.library.name', - to: 'Library Name', - }, - { - from: 'context.ip', - to: 'IP', - }, + { from: 'firstName', to: 'First Name' }, + { from: 'lastName', to: 'Last Name' }, + { from: 'birthday', to: 'Birthday' }, + { from: 'address.city', to: 'City' }, + { from: 'address.country', to: 'Country' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'offer', to: 'Offer' }, + { from: 'title', to: 'Title Page' }, + { from: 'Cart Value', to: 'Cart Value' }, + { from: 'revenue', to: 'Revenue' }, + { from: 'context.app.build', to: 'App Build' }, + { from: 'context.app.name', to: 'App Name' }, + { from: 'context.library.name', to: 'Library Name' }, + { from: 'context.ip', to: 'IP' }, ], sheetId: 'rudder_sheet_id', sheetName: 'rudder_sheet', diff --git a/test/integrations/destinations/heap/router/data.ts b/test/integrations/destinations/heap/router/data.ts index 24efbf4b15..3aa8fae2ca 100644 --- a/test/integrations/destinations/heap/router/data.ts +++ b/test/integrations/destinations/heap/router/data.ts @@ -11,9 +11,7 @@ export const data = [ input: [ { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -24,9 +22,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -38,28 +34,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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', - }, + integrations: { All: true }, + traits: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, messageId: 'fca2e71a-5d30-48e1-ba45-761c16e3820f', originalTimestamp: '2020-01-16T13:21:59.076Z', receivedAt: '2020-01-16T18:52:03.871+05:30', @@ -72,9 +55,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -85,9 +66,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -99,35 +78,19 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + os: { name: '', 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: 'Send Transactional Email', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'c0c5b892-0d54-449f-b85f-ebb39ff04e67', originalTimestamp: '2020-01-16T13:23:20.844Z', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, receivedAt: '2020-01-16T18:53:23.804+05:30', request_ip: '[::1]:62312', sentAt: '2020-01-16T13:23:23.782Z', @@ -138,9 +101,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -151,9 +112,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -165,29 +124,16 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + os: { name: '', 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: 'Send Transactional Email', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'c0c5b892-0d54-449f-b85f-ebb39ff04e67', originalTimestamp: '2020-01-16T13:23:20.844Z', properties: { @@ -219,18 +165,12 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://heapanalytics.com/api/add_user_properties', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { identity: 'sampath', - properties: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + properties: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, app_id: '', }, XML: {}, @@ -240,17 +180,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -268,19 +202,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://heapanalytics.com/api/track', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { identity: 'sampath', event: 'Send Transactional Email', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, app_id: '', timestamp: '2020-01-16T18:53:20.866+05:30', }, @@ -291,17 +219,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -319,19 +241,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://heapanalytics.com/api/track', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { identity: 'sampath', event: 'Send Transactional Email', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, app_id: '', timestamp: '2020-01-16T18:53:20.866+05:30', idempotency_key: '1234', @@ -343,17 +259,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -382,9 +292,7 @@ export const data = [ input: [ { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -395,9 +303,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -409,28 +315,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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', - }, + integrations: { All: true }, + traits: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, messageId: 'fca2e71a-5d30-48e1-ba45-761c16e3820f', originalTimestamp: '2020-01-16T13:21:59.076Z', receivedAt: '2020-01-16T18:52:03.871+05:30', @@ -443,9 +336,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -456,9 +347,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -470,35 +359,19 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + os: { name: '', 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: 'Send Transactional Email', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'c0c5b892-0d54-449f-b85f-ebb39ff04e67', originalTimestamp: '2020-01-16T13:23:20.844Z', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, receivedAt: '2020-01-16T18:53:23.804+05:30', request_ip: '[::1]:62312', sentAt: '2020-01-16T13:23:23.782Z', @@ -509,9 +382,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -522,9 +393,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -536,28 +405,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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', - }, + integrations: { All: true }, + traits: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, messageId: 'fca2e71a-5d30-48e1-ba45-761c16e3820f', originalTimestamp: '2020-01-16T13:21:59.076Z', receivedAt: '2020-01-16T18:52:03.871+05:30', @@ -569,9 +425,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -582,9 +436,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, message: { anonymousId: 'sampath', channel: 'web', @@ -596,35 +448,19 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + os: { name: '', 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: 'Send Transactional Email', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'c0c5b892-0d54-449f-b85f-ebb39ff04e67', originalTimestamp: '2020-01-16T13:23:20.844Z', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, receivedAt: '2020-01-16T18:53:23.804+05:30', request_ip: '[::1]:62312', sentAt: '2020-01-16T13:23:23.782Z', @@ -649,18 +485,12 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://heapanalytics.com/api/add_user_properties', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { identity: 'sampath', - properties: { - anonymousId: 'sampath', - email: 'sampath@gmail.com', - }, + properties: { anonymousId: 'sampath', email: 'sampath@gmail.com' }, app_id: '', }, XML: {}, @@ -670,17 +500,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -698,19 +522,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://heapanalytics.com/api/track', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, params: {}, body: { JSON: { identity: 'sampath', event: 'Send Transactional Email', - properties: { - subject: 'Welcome to My App!', - variation: 'A', - }, + properties: { subject: 'Welcome to My App!', variation: 'A' }, app_id: '', timestamp: '2020-01-16T18:53:20.866+05:30', }, @@ -721,17 +539,11 @@ export const data = [ files: {}, userId: 'sampath', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -745,9 +557,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -758,11 +568,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 400, error: 'invalid message type for heap', @@ -777,9 +583,7 @@ export const data = [ }, { destination: { - Config: { - appId: '', - }, + Config: { appId: '' }, DestinationDefinition: { DisplayName: 'Heap.io', ID: '1WTbl0l5GjOQKOvfmcGwk0T49kV', @@ -790,11 +594,7 @@ export const data = [ Name: 'heap test', Transformations: [], }, - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: false, statusCode: 400, error: 'message type page not supported for heap', diff --git a/test/integrations/destinations/hs/router/data.ts b/test/integrations/destinations/hs/router/data.ts index 95d9d88212..3a30232f9f 100644 --- a/test/integrations/destinations/hs/router/data.ts +++ b/test/integrations/destinations/hs/router/data.ts @@ -21,14 +21,7 @@ export const data = [ message: { type: 'identify', sentAt: '2022-08-23T05:59:38.214Z', - traits: { - to: { - id: 1, - }, - from: { - id: 9405415215, - }, - }, + traits: { to: { id: 1 }, from: { id: 9405415215 } }, userId: '1', channel: 'sources', context: { @@ -60,9 +53,7 @@ export const data = [ request_ip: '10.1.90.32', originalTimestamp: '2022-08-23T05:59:38.214Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'hs', @@ -82,36 +73,17 @@ export const data = [ method: 'POST', endpoint: 'https://api.hubapi.com/crm/v3/associations/companies/contacts/batch/create', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer pat-123', - }, + headers: { 'Content-Type': 'application/json', Authorization: 'Bearer pat-123' }, params: {}, body: { - JSON: { - inputs: [ - { - to: { - id: 1, - }, - from: { - id: 9405415215, - }, - type: 'engineer', - }, - ], - }, + JSON: { inputs: [{ to: { id: 1 }, from: { id: 9405415215 }, type: 'engineer' }] }, JSON_ARRAY: {}, XML: {}, FORM: {}, }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -153,47 +125,26 @@ export const data = [ firstname: 'Test Hubspot1', anonymousId: '1111', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -224,25 +175,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'testhubspot2@email.com', - firstname: 'Test Hubspot2', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + traits: { email: 'testhubspot2@email.com', firstname: 'Test Hubspot2' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'track', messageId: '08829772-d991-427c-b976-b4c4f4430b4e', @@ -256,14 +196,9 @@ export const data = [ }, sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -291,24 +226,14 @@ export const data = [ method: 'POST', endpoint: 'https://api.hubapi.com/contacts/v1/contact/createOrUpdate/email/testhubspot2@email.com', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, userId: '00000000000000000000000000', - params: { - hapikey: 'dummy-apikey', - }, + params: { hapikey: 'dummy-apikey' }, body: { JSON: { properties: [ - { - property: 'email', - value: 'testhubspot3@email.com', - }, - { - property: 'firstname', - value: 'Test Hubspot3', - }, + { property: 'email', value: 'testhubspot3@email.com' }, + { property: 'firstname', value: 'Test Hubspot3' }, ], }, XML: {}, @@ -317,14 +242,9 @@ export const data = [ files: {}, statusCode: 200, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -360,47 +280,26 @@ export const data = [ firstname: 'Test Hubspot4', anonymousId: '4444', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { - Config: { - apiKey: 'rate-limit-id', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'rate-limit-id', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -438,12 +337,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.hubapi.com/contacts/v1/contact/batch/', - headers: { - 'Content-Type': 'application/json', - }, - params: { - hapikey: 'dummy-apikey', - }, + headers: { 'Content-Type': 'application/json' }, + params: { hapikey: 'dummy-apikey' }, body: { JSON: {}, JSON_ARRAY: { @@ -456,23 +351,14 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 3, - }, - { - jobId: 1, - }, - { - jobId: 4, - }, + { jobId: 3, userId: 'u1' }, + { jobId: 1, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, ], batched: true, statusCode: 200, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -499,35 +385,21 @@ export const data = [ type: 'REST', method: 'GET', endpoint: 'https://track.hubspot.com/v1/event', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: { _a: 'dummy-hubId', _n: 'test track event HS', email: 'testhubspot2@email.com', firstname: 'Test Hubspot2', }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -569,11 +441,7 @@ export const data = [ context: { mappedToDestination: true, externalId: [ - { - identifierType: 'email', - id: 'testhubspot2@email.com', - type: 'HS-lead', - }, + { identifierType: 'email', id: 'testhubspot2@email.com', type: 'HS-lead' }, ], sources: { job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', @@ -585,25 +453,16 @@ export const data = [ }, }, type: 'identify', - traits: { - firstname: 'Test Hubspot', - anonymousId: '12345', - country: 'India', - }, + traits: { firstname: 'Test Hubspot', anonymousId: '12345', country: 'India' }, messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -623,9 +482,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { @@ -633,11 +490,7 @@ export const data = [ context: { mappedToDestination: true, externalId: [ - { - identifierType: 'email', - id: 'testhubspot@email.com', - type: 'HS-lead', - }, + { identifierType: 'email', id: 'testhubspot@email.com', type: 'HS-lead' }, ], sources: { job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', @@ -649,25 +502,16 @@ export const data = [ }, }, type: 'identify', - traits: { - firstname: 'Test Hubspot 1', - anonymousId: '123451', - country: 'India 1', - }, + traits: { firstname: 'Test Hubspot 1', anonymousId: '123451', country: 'India 1' }, messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -687,9 +531,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'hs', @@ -708,12 +550,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/create', - headers: { - 'Content-Type': 'application/json', - }, - params: { - hapikey: 'dummy-apikey', - }, + headers: { 'Content-Type': 'application/json' }, + params: { hapikey: 'dummy-apikey' }, body: { JSON: { inputs: [ @@ -733,18 +571,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: true, statusCode: 200, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -771,12 +602,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/update', - headers: { - 'Content-Type': 'application/json', - }, - params: { - hapikey: 'dummy-apikey', - }, + headers: { 'Content-Type': 'application/json' }, + params: { hapikey: 'dummy-apikey' }, body: { JSON: { inputs: [ @@ -797,18 +624,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { - Config: { - apiKey: 'dummy-apikey', - hubID: 'dummy-hubId', - }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -850,11 +670,7 @@ export const data = [ context: { mappedToDestination: true, externalId: [ - { - identifierType: 'email', - id: 'testhubspot2@email.com', - type: 'HS-lead', - }, + { identifierType: 'email', id: 'testhubspot2@email.com', type: 'HS-lead' }, ], sources: { job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', @@ -866,18 +682,12 @@ export const data = [ }, }, type: 'identify', - traits: { - firstname: 'Test Hubspot', - anonymousId: '12345', - country: 'India', - }, + traits: { firstname: 'Test Hubspot', anonymousId: '12345', country: 'India' }, messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { @@ -893,42 +703,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -949,9 +739,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { @@ -959,11 +747,7 @@ export const data = [ context: { mappedToDestination: true, externalId: [ - { - identifierType: 'email', - id: 'testhubspot@email.com', - type: 'HS-lead', - }, + { identifierType: 'email', id: 'testhubspot@email.com', type: 'HS-lead' }, ], sources: { job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', @@ -975,18 +759,12 @@ export const data = [ }, }, type: 'identify', - traits: { - firstname: 'Test Hubspot 1', - anonymousId: '123451', - country: 'India 1', - }, + traits: { firstname: 'Test Hubspot 1', anonymousId: '123451', country: 'India 1' }, messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { @@ -1002,42 +780,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1058,9 +816,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { message: { @@ -1096,9 +852,7 @@ export const data = [ originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { @@ -1114,42 +868,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1170,9 +904,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, }, ], destType: 'hs', @@ -1227,12 +959,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 3, - }, - { - jobId: 4, - }, + { jobId: 3, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -1249,42 +977,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1337,11 +1045,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -1357,42 +1061,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1444,42 +1128,24 @@ export const data = [ firstname: 'Test Hubspot22', anonymousId: '4444', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1493,42 +1159,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1565,42 +1211,24 @@ export const data = [ firstname: 'Test Hubspot44', anonymousId: '4444', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1614,42 +1242,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1685,13 +1293,9 @@ export const data = [ ], }, event: 'Purchase', - properties: { - Revenue: 'name1', - }, - }, - metadata: { - jobId: 3, + properties: { Revenue: 'name1' }, }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1705,42 +1309,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1777,42 +1361,24 @@ export const data = [ firstname: 'Test Hubspot22', anonymousId: '4444', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1826,42 +1392,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -1898,42 +1444,24 @@ export const data = [ firstname: 'Test Hubspot44', anonymousId: '4444', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', locale: 'en-GB', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, type: 'identify', messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', originalTimestamp: '2019-10-15T09:35:31.288Z', anonymousId: '00000000000000000000000000', userId: '12345', - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1947,42 +1475,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -2029,17 +1537,9 @@ export const data = [ body: { JSON: { inputs: [ + { properties: { email: 'noname@email.com', firstname: 'Test Hubspot44' } }, { - properties: { - email: 'noname@email.com', - firstname: 'Test Hubspot44', - }, - }, - { - properties: { - email: 'testhubspot@email.com', - firstname: 'Test Hubspot44', - }, + properties: { email: 'testhubspot@email.com', firstname: 'Test Hubspot44' }, }, ], }, @@ -2050,18 +1550,10 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, - { - jobId: 4, - }, - { - jobId: 5, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, + { jobId: 5, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -2078,42 +1570,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', @@ -2150,9 +1622,7 @@ export const data = [ JSON: { email: 'osvaldocostaferreira98@gmail.com', eventName: 'pedummy-hubId_rs_hub_test', - properties: { - value: 'name1', - }, + properties: { value: 'name1' }, }, JSON_ARRAY: {}, XML: {}, @@ -2160,11 +1630,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -2180,42 +1646,22 @@ export const data = [ rsEventName: 'Purchase', hubspotEventName: 'pedummy-hubId_rs_hub_test', eventProperties: [ - { - from: 'Revenue', - to: 'value', - }, - { - from: 'Price', - to: 'cost', - }, + { from: 'Revenue', to: 'value' }, + { from: 'Price', to: 'cost' }, ], }, { rsEventName: 'Order Complete', hubspotEventName: 'pedummy-hubId_rs_hub_chair', eventProperties: [ - { - from: 'firstName', - to: 'first_name', - }, - { - from: 'lastName', - to: 'last_name', - }, + { from: 'firstName', to: 'first_name' }, + { from: 'lastName', to: 'last_name' }, ], }, ], eventFilteringOption: 'disable', - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', diff --git a/test/integrations/destinations/impact/router/data.ts b/test/integrations/destinations/impact/router/data.ts index 1e9cd9cc6e..e9120ae03d 100644 --- a/test/integrations/destinations/impact/router/data.ts +++ b/test/integrations/destinations/impact/router/data.ts @@ -18,18 +18,8 @@ export const data = [ impactAppId: '2323', eventTypeId: '56446', enableEmailHashing: true, - rudderToImpactProperty: [ - { - from: 'profit', - to: 'Money1', - }, - ], - productsMapping: [ - { - from: 'sku', - to: 'ItemSku', - }, - ], + rudderToImpactProperty: [{ from: 'profit', to: 'Money1' }], + productsMapping: [{ from: 'sku', to: 'ItemSku' }], enableIdentifyEvents: true, enablePageEvents: false, enableScreenEvents: false, @@ -37,40 +27,24 @@ export const data = [ installEventNames: [{ eventName: 'App Installed' }], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'identify', sentAt: '2021-01-03T17:02:53.195Z', userId: 'user123', channel: 'web', context: { - os: { - name: 'android', - version: '1.12.3', - }, + os: { name: 'android', version: '1.12.3' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.11', namespace: 'com.rudderlabs.javascript', }, - traits: { - email: 'user123@email.com', - phone: '+917836362334', - userId: 'user123', - }, + traits: { email: 'user123@email.com', phone: '+917836362334', userId: 'user123' }, locale: 'en-US', - device: { - token: 'token', - id: 'id', - type: 'ios', - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + device: { token: 'token', id: 'id', type: 'ios' }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', }, @@ -103,10 +77,7 @@ export const data = [ ], }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -114,13 +85,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -130,9 +96,7 @@ export const data = [ anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', originalTimestamp: 'NOW', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { accountSID: 'dfsgertrtff3erfc34rfwf', @@ -141,18 +105,8 @@ export const data = [ impactAppId: '2323', eventTypeId: '56446', enableEmailHashing: true, - rudderToImpactProperty: [ - { - from: 'properties.profit', - to: 'Money1', - }, - ], - productsMapping: [ - { - from: 'variant', - to: 'ItemCategory', - }, - ], + rudderToImpactProperty: [{ from: 'properties.profit', to: 'Money1' }], + productsMapping: [{ from: 'variant', to: 'ItemCategory' }], enableIdentifyEvents: false, enablePageEvents: false, enableScreenEvents: false, @@ -208,11 +162,7 @@ export const data = [ version: '1', endpoint: 'https://trkapi.impact.com/PageLoad', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -223,18 +173,8 @@ export const data = [ impactAppId: '2323', eventTypeId: '56446', enableEmailHashing: true, - rudderToImpactProperty: [ - { - from: 'profit', - to: 'Money1', - }, - ], - productsMapping: [ - { - from: 'sku', - to: 'ItemSku', - }, - ], + rudderToImpactProperty: [{ from: 'profit', to: 'Money1' }], + productsMapping: [{ from: 'sku', to: 'ItemSku' }], enableIdentifyEvents: true, enablePageEvents: false, enableScreenEvents: false, @@ -287,11 +227,7 @@ export const data = [ endpoint: 'https://api.impact.com/Advertisers/dfsgertrtff3erfc34rfwf/Conversions', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -302,18 +238,8 @@ export const data = [ impactAppId: '2323', eventTypeId: '56446', enableEmailHashing: true, - rudderToImpactProperty: [ - { - from: 'properties.profit', - to: 'Money1', - }, - ], - productsMapping: [ - { - from: 'variant', - to: 'ItemCategory', - }, - ], + rudderToImpactProperty: [{ from: 'properties.profit', to: 'Money1' }], + productsMapping: [{ from: 'variant', to: 'ItemCategory' }], enableIdentifyEvents: false, enablePageEvents: false, enableScreenEvents: false, diff --git a/test/integrations/destinations/indicative/router/data.ts b/test/integrations/destinations/indicative/router/data.ts index 037d5d5c3d..88e0665e62 100644 --- a/test/integrations/destinations/indicative/router/data.ts +++ b/test/integrations/destinations/indicative/router/data.ts @@ -10,14 +10,8 @@ export const data = [ body: { input: [ { - destination: { - Config: { - apiKey: 'abcde', - }, - }, - metadata: { - jobId: 2, - }, + destination: { Config: { apiKey: 'abcde' } }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', context: { @@ -27,25 +21,15 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - AM: true, - }, + integrations: { AM: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { additional_bet_index: 0, @@ -90,14 +74,8 @@ export const data = [ }, }, { - destination: { - Config: { - apiKey: 'abcde', - }, - }, - metadata: { - jobId: 2, - }, + destination: { Config: { apiKey: 'abcde' } }, + metadata: { jobId: 3, userId: 'u1' }, message: { channel: 'web', context: { @@ -107,21 +85,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -140,9 +110,7 @@ export const data = [ street: '', }, }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, }, @@ -220,18 +188,10 @@ export const data = [ userId: 'test_user_id', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'abcde', - }, - }, + destination: { Config: { apiKey: 'abcde' } }, }, { batchedRequest: [ @@ -280,11 +240,7 @@ export const data = [ }, params: {}, body: { - JSON: { - previousId: 'anon_id', - newId: '123456', - apiKey: 'abcde', - }, + JSON: { previousId: 'anon_id', newId: '123456', apiKey: 'abcde' }, XML: {}, JSON_ARRAY: {}, FORM: {}, @@ -293,18 +249,10 @@ export const data = [ userId: '123456', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'abcde', - }, - }, + destination: { Config: { apiKey: 'abcde' } }, }, ], }, diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index c8708562b5..52e8abe353 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -42,9 +42,7 @@ export const data = [ updateLastRequestAt: true, }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1 }, }, { message: { @@ -236,11 +234,7 @@ export const data = [ }, }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1 }], statusCode: 200, }, { @@ -295,11 +289,7 @@ export const data = [ }, }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2 }], statusCode: 200, }, { diff --git a/test/integrations/destinations/iterable/router/data.ts b/test/integrations/destinations/iterable/router/data.ts index 7cd19381d6..09eedc8eb8 100644 --- a/test/integrations/destinations/iterable/router/data.ts +++ b/test/integrations/destinations/iterable/router/data.ts @@ -15,10 +15,7 @@ export const data = [ sentAt: '2022-09-27T11:13:03.777Z', messageId: '9ad41366-8060-4c9f-b181-f6bea67d5469', originalTimestamp: '2022-09-27T11:13:03.777Z', - traits: { - ruchira: 'donaldbaker@ellis.com', - new_field2: 'GB', - }, + traits: { ruchira: 'donaldbaker@ellis.com', new_field2: 'GB' }, channel: 'sources', rudderId: '3d51640c-ab09-42c1-b7b2-db6ab433b35e', context: { @@ -32,11 +29,7 @@ export const data = [ }, mappedToDestination: 'true', externalId: [ - { - id: 'Tiffany', - type: 'ITERABLE-test-ruchira', - identifierType: 'itemId', - }, + { id: 'Tiffany', type: 'ITERABLE-test-ruchira', identifierType: 'itemId' }, ], }, timestamp: '2022-09-27T11:12:59.079Z', @@ -45,14 +38,9 @@ export const data = [ recordId: '10', request_ip: '10.1.86.248', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', - hubID: '22066036', - }, + Config: { apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', hubID: '22066036' }, Enabled: true, }, }, @@ -62,10 +50,7 @@ export const data = [ sentAt: '2022-09-27T11:13:03.777Z', messageId: '9ad41366-8060-4c9f-b181-f6bea67d5469', originalTimestamp: '2022-09-27T11:13:03.777Z', - traits: { - ruchira: 'abc@ellis.com', - new_field2: 'GB1', - }, + traits: { ruchira: 'abc@ellis.com', new_field2: 'GB1' }, channel: 'sources', rudderId: '3d51640c-ab09-42c1-b7b2-db6ab433b35e', context: { @@ -79,11 +64,7 @@ export const data = [ }, mappedToDestination: 'true', externalId: [ - { - id: 'ABC', - type: 'ITERABLE-test-ruchira', - identifierType: 'itemId', - }, + { id: 'ABC', type: 'ITERABLE-test-ruchira', identifierType: 'itemId' }, ], }, timestamp: '2022-09-27T11:12:59.079Z', @@ -92,14 +73,9 @@ export const data = [ recordId: '10', request_ip: '10.1.86.248', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', - hubID: '22066036', - }, + Config: { apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', hubID: '22066036' }, Enabled: true, }, }, @@ -127,14 +103,8 @@ export const data = [ body: { JSON: { documents: { - Tiffany: { - ruchira: 'donaldbaker@ellis.com', - new_field2: 'GB', - }, - ABC: { - ruchira: 'abc@ellis.com', - new_field2: 'GB1', - }, + Tiffany: { ruchira: 'donaldbaker@ellis.com', new_field2: 'GB' }, + ABC: { ruchira: 'abc@ellis.com', new_field2: 'GB1' }, }, replaceUploadedFieldsOnly: true, }, @@ -145,20 +115,13 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 2, - }, - { - jobId: 2, - }, + { jobId: 2, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: true, statusCode: 200, destination: { - Config: { - apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', - hubID: '22066036', - }, + Config: { apiKey: '583af2f8-15ba-49c0-8511-76383e7de07e', hubID: '22066036' }, Enabled: true, }, }, @@ -182,15 +145,8 @@ export const data = [ type: 'track', event: 'Email Opened', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', properties: { @@ -201,9 +157,7 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiKey: '62d12498c37c4fd8a1a546c2d35c2f60', @@ -233,22 +187,15 @@ export const data = [ email: 'manashi@website.com', country: 'India', }, - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', + library: { name: 'analytics-node', version: '0.0.3' }, }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-cc3ef811f686139ee527b806ee0129ef-163a3a88-266f-447e-8cce-34a8f42f8dcd', anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.462Z', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { apiKey: '62d12498c37c4fd8a1a546c2d35c2f60', @@ -270,24 +217,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'sayan@gmail.com', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'page', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -302,15 +239,11 @@ export const data = [ url: '', category: 'test-category', }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { apiKey: '12345', @@ -342,9 +275,7 @@ export const data = [ task_run_id: 'c5tar6cqgmgmcjvupdi0', version: 'release.v1.6.8', }, - device: { - token: 54321, - }, + device: { token: 54321 }, }, messageId: '2f052f7c-f694-4849-a7ed-a432f7ffa0a4', originalTimestamp: '2021-10-28T14:03:50.503Z', @@ -365,9 +296,7 @@ export const data = [ type: 'identify', userId: 'lynnanderson@smith.net', }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, destination: { ID: '1zia9wKshXt80YksLmUdJnr7IHI', Name: 'test_iterable', @@ -420,9 +349,7 @@ export const data = [ IsProcessorEnabled: true, }, libraries: [], - request: { - query: {}, - }, + request: { query: {} }, }, { message: { @@ -434,24 +361,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'sayan@gmail.com', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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', ip: '0.0.0.0', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, event: 'product added', type: 'track', @@ -489,15 +406,11 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 6, - }, + metadata: { jobId: 6, userId: 'u1' }, destination: { Config: { apiKey: '62d12498c37c4fd8a1a546c2d35c2f60', @@ -513,15 +426,8 @@ export const data = [ message: { type: 'page', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-6f62b91e789a636929ca38aed01c5f6e-103c720d-81bd-4742-98d6-d45a65aed23e', properties: { @@ -532,9 +438,7 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 7, - }, + metadata: { jobId: 7, userId: 'u1' }, destination: { Config: { apiKey: '62d12498c37c4fd8a1a546c2d35c2f60', @@ -550,15 +454,8 @@ export const data = [ message: { type: 'alias', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-6f62b91e789a636929ca38aed01c5f6e-103c720d-81bd-4742-98d6-d45a65aed23e', properties: { @@ -571,9 +468,7 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 8, - }, + metadata: { jobId: 8, userId: 'u1' }, destination: { Config: { apiKey: '62d12498c37c4fd8a1a546c2d35c2f60', @@ -627,11 +522,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -679,11 +570,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -703,10 +590,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.iterable.com/api/events/trackBulk', - headers: { - 'Content-Type': 'application/json', - api_key: '12345', - }, + headers: { 'Content-Type': 'application/json', api_key: '12345' }, params: {}, body: { JSON: { @@ -733,11 +617,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -766,9 +646,7 @@ export const data = [ JSON: { user: { email: 'sayan@gmail.com', - dataFields: { - email: 'sayan@gmail.com', - }, + dataFields: { email: 'sayan@gmail.com' }, userId: '12345', preferUserId: true, mergeNestedObjects: true, @@ -802,11 +680,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 6, - }, - ], + metadata: [{ jobId: 6, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -852,11 +726,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 7, - }, - ], + metadata: [{ jobId: 7, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -882,21 +752,14 @@ export const data = [ }, params: {}, body: { - JSON: { - currentEmail: 'old@email.com', - newEmail: 'new@email.com', - }, + JSON: { currentEmail: 'old@email.com', newEmail: 'new@email.com' }, JSON_ARRAY: {}, XML: {}, FORM: {}, }, files: {}, }, - metadata: [ - { - jobId: 8, - }, - ], + metadata: [{ jobId: 8, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -916,10 +779,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.iterable.com/api/users/bulkUpdate', - headers: { - 'Content-Type': 'application/json', - api_key: '12345', - }, + headers: { 'Content-Type': 'application/json', api_key: '12345' }, params: {}, body: { JSON: { @@ -947,11 +807,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: true, statusCode: 200, destination: { diff --git a/test/integrations/destinations/june/router/data.ts b/test/integrations/destinations/june/router/data.ts index cf8c4f0011..81e5c6eb5a 100644 --- a/test/integrations/destinations/june/router/data.ts +++ b/test/integrations/destinations/june/router/data.ts @@ -10,49 +10,29 @@ export const data = [ body: { input: [ { - destination: { - Config: { - apiKey: '93EMyDLvfpbRxxYn', - }, - ID: 'june123', - }, - metadata: { - jobId: 1, - }, + destination: { Config: { apiKey: '93EMyDLvfpbRxxYn' }, ID: 'june123' }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'identify', sentAt: '2022-01-20T13:39:21.033Z', channel: 'web', userId: '5136633649', - context: { - traits: { - name: 'John Doe', - email: 'johndoe@gmail.com', - age: 25, - }, - }, + context: { traits: { name: 'John Doe', email: 'johndoe@gmail.com', age: 25 } }, rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', anonymousId: 'bf412108-0357-4330-b119-7305e767823c', originalTimestamp: '2022-01-20T13:39:21.032Z', }, }, { - destination: { - Config: { - apiKey: '93EMyDLvfpbRxxYn', - }, - ID: 'june123', - }, - metadata: { - jobId: 2, - }, + destination: { Config: { apiKey: '93EMyDLvfpbRxxYn' }, ID: 'june123' }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'track', event: 'Product Reviewed', properties: { review_id: '12345', product_id: '123', - rating: 3.0, + rating: 3, review_body: 'Average product, expected much more.', groupId: '91Yb32830', }, @@ -80,11 +60,7 @@ export const data = [ JSON: { anonymousId: 'bf412108-0357-4330-b119-7305e767823c', timestamp: '2022-01-20T13:39:21.032Z', - traits: { - age: 25, - email: 'johndoe@gmail.com', - name: 'John Doe', - }, + traits: { age: 25, email: 'johndoe@gmail.com', name: 'John Doe' }, userId: '5136633649', }, JSON_ARRAY: {}, @@ -101,33 +77,15 @@ export const data = [ type: 'REST', version: '1', }, - destination: { - Config: { - apiKey: '93EMyDLvfpbRxxYn', - }, - ID: 'june123', - }, - metadata: [ - { - jobId: 1, - }, - ], + destination: { Config: { apiKey: '93EMyDLvfpbRxxYn' }, ID: 'june123' }, + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { - destination: { - Config: { - apiKey: '93EMyDLvfpbRxxYn', - }, - ID: 'june123', - }, + destination: { Config: { apiKey: '93EMyDLvfpbRxxYn' }, ID: 'june123' }, batched: false, error: 'Missing required value from "userIdOnly"', - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { destType: 'JUNE', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/kafka/batch/data.ts b/test/integrations/destinations/kafka/batch/data.ts index 0cc1d75c24..131833b23c 100644 --- a/test/integrations/destinations/kafka/batch/data.ts +++ b/test/integrations/destinations/kafka/batch/data.ts @@ -19,12 +19,8 @@ export const data = [ userId: 'user1', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '6f27a4da-cefb-4800-acf1-f467e8aab91c', timestamp: '2020-02-02T00:23:09.544Z', @@ -35,10 +31,7 @@ export const data = [ }, topic: 'new-topic', }, - metadata: { - rudderId: 'user1<<>>new-topic', - jobId: 1, - }, + metadata: { rudderId: 'user1<<>>new-topic', jobId: 1, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -105,12 +98,8 @@ export const data = [ userId: 'user2', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: 'fe182d9e-e86e-4db5-ae12-f4b399555fcc', timestamp: '2020-02-02T00:23:09.544Z', @@ -121,10 +110,7 @@ export const data = [ }, topic: 'new-topic', }, - metadata: { - rudderId: 'user2<<>>new-topic', - jobId: 2, - }, + metadata: { rudderId: 'user2<<>>new-topic', jobId: 2, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -191,12 +177,8 @@ export const data = [ userId: 'user3', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '2803e656-77ff-47ca-9606-90663f9aed38', timestamp: '2020-02-02T00:23:09.544Z', @@ -207,10 +189,7 @@ export const data = [ }, topic: 'new-topic', }, - metadata: { - rudderId: 'user3<<>>new-topic', - jobId: 3, - }, + metadata: { rudderId: 'user3<<>>new-topic', jobId: 3, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -277,12 +256,8 @@ export const data = [ userId: 'user4', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', @@ -293,10 +268,7 @@ export const data = [ }, topic: 'new-topic', }, - metadata: { - rudderId: 'user4<<>>new-topic', - jobId: 4, - }, + metadata: { rudderId: 'user4<<>>new-topic', jobId: 4, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -363,19 +335,10 @@ export const data = [ userId: 'user5', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - schemaId: 'schema001', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { schemaId: 'schema001' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -386,10 +349,7 @@ export const data = [ schemaId: 'schema001', topic: 'new-topic', }, - metadata: { - rudderId: 'user5<<>>new-topic', - jobId: 5, - }, + metadata: { rudderId: 'user5<<>>new-topic', jobId: 5, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -456,19 +416,10 @@ export const data = [ userId: 'user6', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-1', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-1' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -478,10 +429,7 @@ export const data = [ }, topic: 'topic-1', }, - metadata: { - rudderId: 'user6<<>>topic-1', - jobId: 6, - }, + metadata: { rudderId: 'user6<<>>topic-1', jobId: 6, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -548,19 +496,10 @@ export const data = [ userId: 'user7', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-1', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-1' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -570,10 +509,7 @@ export const data = [ }, topic: 'topic-1', }, - metadata: { - rudderId: 'user7<<>>topic-1', - jobId: 7, - }, + metadata: { rudderId: 'user7<<>>topic-1', jobId: 7, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -640,19 +576,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-2', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-2' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -662,10 +589,7 @@ export const data = [ }, topic: 'topic-2', }, - metadata: { - rudderId: 'user8<<>>topic-2', - jobId: 8, - }, + metadata: { rudderId: 'user8<<>>topic-2', jobId: 8, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -732,19 +656,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-2', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-2' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -754,10 +669,7 @@ export const data = [ }, topic: 'topic-2', }, - metadata: { - rudderId: 'user8<<>>topic-2', - jobId: 9, - }, + metadata: { rudderId: 'user8<<>>topic-2', jobId: 9, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -824,19 +736,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-3', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-3' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -846,10 +749,7 @@ export const data = [ }, topic: 'topic-3', }, - metadata: { - rudderId: 'user8<<>>topic-3', - jobId: 10, - }, + metadata: { rudderId: 'user8<<>>topic-3', jobId: 10, userId: 'u1' }, destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', @@ -927,12 +827,8 @@ export const data = [ userId: 'user1', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '6f27a4da-cefb-4800-acf1-f467e8aab91c', timestamp: '2020-02-02T00:23:09.544Z', @@ -951,12 +847,8 @@ export const data = [ userId: 'user2', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: 'fe182d9e-e86e-4db5-ae12-f4b399555fcc', timestamp: '2020-02-02T00:23:09.544Z', @@ -975,12 +867,8 @@ export const data = [ userId: 'user3', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '2803e656-77ff-47ca-9606-90663f9aed38', timestamp: '2020-02-02T00:23:09.544Z', @@ -999,12 +887,8 @@ export const data = [ userId: 'user4', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', @@ -1023,19 +907,10 @@ export const data = [ userId: 'user5', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - schemaId: 'schema001', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { schemaId: 'schema001' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1048,23 +923,11 @@ export const data = [ }, ], metadata: [ - { rudderId: 'user1<<>>new-topic', jobId: 1 }, - { - rudderId: 'user2<<>>new-topic', - jobId: 2, - }, - { - rudderId: 'user3<<>>new-topic', - jobId: 3, - }, - { - rudderId: 'user4<<>>new-topic', - jobId: 4, - }, - { - rudderId: 'user5<<>>new-topic', - jobId: 5, - }, + { rudderId: 'user1<<>>new-topic', jobId: 1, userId: 'u1' }, + { rudderId: 'user2<<>>new-topic', jobId: 2, userId: 'u1' }, + { rudderId: 'user3<<>>new-topic', jobId: 3, userId: 'u1' }, + { rudderId: 'user4<<>>new-topic', jobId: 4, userId: 'u1' }, + { rudderId: 'user5<<>>new-topic', jobId: 5, userId: 'u1' }, ], destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', @@ -1135,19 +998,10 @@ export const data = [ userId: 'user6', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-1', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-1' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1165,19 +1019,10 @@ export const data = [ userId: 'user7', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-1', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-1' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1189,14 +1034,8 @@ export const data = [ }, ], metadata: [ - { - rudderId: 'user6<<>>topic-1', - jobId: 6, - }, - { - rudderId: 'user7<<>>topic-1', - jobId: 7, - }, + { rudderId: 'user6<<>>topic-1', jobId: 6, userId: 'u1' }, + { rudderId: 'user7<<>>topic-1', jobId: 7, userId: 'u1' }, ], destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', @@ -1267,19 +1106,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-2', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-2' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1297,19 +1127,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-2', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-2' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1321,14 +1142,8 @@ export const data = [ }, ], metadata: [ - { - rudderId: 'user8<<>>topic-2', - jobId: 8, - }, - { - rudderId: 'user8<<>>topic-2', - jobId: 9, - }, + { rudderId: 'user8<<>>topic-2', jobId: 8, userId: 'u1' }, + { rudderId: 'user8<<>>topic-2', jobId: 9, userId: 'u1' }, ], destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', @@ -1399,19 +1214,10 @@ export const data = [ userId: 'user8', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, - }, - integrations: { - All: true, - KAFKA: { - topic: 'topic-3', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, + integrations: { All: true, KAFKA: { topic: 'topic-3' } }, messageId: '87c98fc2-561b-4631-8cd6-1d02cdd1429f', timestamp: '2020-02-02T00:23:09.544Z', receivedAt: '2021-07-08T02:45:06.851+05:30', @@ -1422,12 +1228,7 @@ export const data = [ topic: 'topic-3', }, ], - metadata: [ - { - rudderId: 'user8<<>>topic-3', - jobId: 10, - }, - ], + metadata: [{ rudderId: 'user8<<>>topic-3', jobId: 10, userId: 'u1' }], destination: { ID: '1uzGR4rn915R6Xts9KRfWAzmgGL', Name: 'local-kafka-test', diff --git a/test/integrations/destinations/keen/router/data.ts b/test/integrations/destinations/keen/router/data.ts index d46d2363e2..a88fc5dcce 100644 --- a/test/integrations/destinations/keen/router/data.ts +++ b/test/integrations/destinations/keen/router/data.ts @@ -19,24 +19,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'sayan@gmail.com', - anonymousId: '12345', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'track', messageId: 'ec5481b6-a926-4d2e-b293-0b3a77c4d3be', @@ -51,18 +40,11 @@ export const data = [ user_actual_id: 12345, user_time_spent: 50000, }, - integrations: { - All: true, - }, - traits: { - email: 'test@gmail.com', - anonymousId: 'anon-id', - }, + integrations: { All: true }, + traits: { email: 'test@gmail.com', anonymousId: 'anon-id' }, sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { projectID: 'abcde', @@ -84,25 +66,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - traits: { - email: 'sayan@gmail.com', - anonymousId: '12345', - }, - library: { - name: 'RudderLabs JavaScript SDK', - 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, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, }, type: 'page', messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71', @@ -117,19 +88,12 @@ export const data = [ title: 'Test Page', url: 'www.rudderlabs.com', }, - traits: { - email: 'test@gmail.com', - anonymousId: 'anon-id', - }, - integrations: { - All: true, - }, + traits: { email: 'test@gmail.com', anonymousId: 'anon-id' }, + integrations: { All: true }, name: 'ApplicationLoaded', sentAt: '2019-10-14T11:15:53.296Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { projectID: 'abcde', @@ -165,16 +129,12 @@ export const data = [ keen: { addons: [ { - input: { - ip: 'request_ip', - }, + input: { ip: 'request_ip' }, name: 'keen:ip_to_geo', output: 'ip_geo_info', }, { - input: { - ua_string: 'user_agent', - }, + input: { ua_string: 'user_agent' }, name: 'keen:ua_parser', output: 'parsed_user_agent', }, @@ -182,10 +142,7 @@ export const data = [ }, anonymousId: '00000000000000000000000000', user: { - traits: { - anonymousId: 'anon-id', - email: 'test@gmail.com', - }, + traits: { anonymousId: 'anon-id', email: 'test@gmail.com' }, userId: '12345', }, user_agent: @@ -196,21 +153,14 @@ export const data = [ files: {}, endpoint: 'https://api.keen.io/3.0/projects/abcde/events/test track event', userId: '12345', - headers: { - 'Content-Type': 'application/json', - Authorization: 'xyz', - }, + headers: { 'Content-Type': 'application/json', Authorization: 'xyz' }, version: '1', params: {}, type: 'REST', method: 'POST', statusCode: 200, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -239,16 +189,12 @@ export const data = [ keen: { addons: [ { - input: { - ip: 'request_ip', - }, + input: { ip: 'request_ip' }, name: 'keen:ip_to_geo', output: 'ip_geo_info', }, { - input: { - ua_string: 'user_agent', - }, + input: { ua_string: 'user_agent' }, name: 'keen:ua_parser', output: 'parsed_user_agent', }, @@ -256,10 +202,7 @@ export const data = [ }, anonymousId: '00000000000000000000000000', user: { - traits: { - anonymousId: 'anon-id', - email: 'test@gmail.com', - }, + traits: { anonymousId: 'anon-id', email: 'test@gmail.com' }, userId: '12345', }, path: '/test', @@ -272,21 +215,14 @@ export const data = [ endpoint: 'https://api.keen.io/3.0/projects/abcde/events/Viewed ApplicationLoaded page', userId: '12345', - headers: { - 'Content-Type': 'application/json', - Authorization: 'xyz', - }, + headers: { 'Content-Type': 'application/json', Authorization: 'xyz' }, version: '1', params: {}, type: 'REST', method: 'POST', statusCode: 200, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/kissmetrics/router/data.ts b/test/integrations/destinations/kissmetrics/router/data.ts index bba00edf96..827a493ae5 100644 --- a/test/integrations/destinations/kissmetrics/router/data.ts +++ b/test/integrations/destinations/kissmetrics/router/data.ts @@ -37,25 +37,15 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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, - }, + integrations: { All: true }, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', originalTimestamp: '2020-01-24T06:29:02.358Z', properties: { @@ -79,6 +69,7 @@ export const data = [ jobId: 1, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', sourceId: '1WjrlZIy1d41MCceOrFbDVPnOPY', + userId: 'u1', }, }, { @@ -109,18 +100,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -130,9 +113,7 @@ export const data = [ 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, - }, + integrations: { All: true }, traits: { city: 'Disney-1', country: 'India', @@ -155,6 +136,7 @@ export const data = [ jobId: 2, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', sourceId: '1WjrlZIy1d41MCceOrFbDVPnOPY', + userId: 'u1', }, }, ], @@ -187,12 +169,7 @@ export const data = [ _t: '1579847342', _d: 1, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, userId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', statusCode: 200, @@ -206,6 +183,7 @@ export const data = [ jobId: 1, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', sourceId: '1WjrlZIy1d41MCceOrFbDVPnOPY', + userId: 'u1', }, ], batched: false, @@ -245,12 +223,7 @@ export const data = [ _t: '1579847342', _d: 1, }, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, + body: { JSON: {}, XML: {}, JSON_ARRAY: {}, FORM: {} }, files: {}, userId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', statusCode: 200, @@ -264,6 +237,7 @@ export const data = [ jobId: 2, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', sourceId: '1WjrlZIy1d41MCceOrFbDVPnOPY', + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/klaviyo/processor/data.ts b/test/integrations/destinations/klaviyo/processor/data.ts index 2025957716..06c4a3e530 100644 --- a/test/integrations/destinations/klaviyo/processor/data.ts +++ b/test/integrations/destinations/klaviyo/processor/data.ts @@ -1,2430 +1,15 @@ +import { ecomTestData } from './ecomTestData'; +import { groupTestData } from './groupTestData'; +import { identifyData } from './identifyTestData'; +import { screenTestData } from './screenTestData'; +import { trackTestData } from './trackTestData'; +import { validationTestData } from './validationTestData'; + export const data = [ - { - "name": "klaviyo", - "description": "Profile updating call and subscribe user (old transformer)", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": - { - "version": "1", - "type": "REST", - "userId": "", - "method": "PATCH", - "endpoint": "https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile", - "attributes": { - "external_id": "user@1", - "email": "test@rudderstack.com", - "first_name": "Test", - "last_name": "Rudderlabs", - "phone_number": "+12 345 578 900", - "title": "Developer", - "organization": "Rudder", - "location": { - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001" - }, - "properties": { - "Flagged": false, - "Residence": "Shibuya" - } - }, - "id": "01GW3PHVY0MTCDGS0A1612HARX" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - }, { - "output": - { - "version": "1", - "type": "REST", - "method": "POST", - "userId": "", - "endpoint": "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile-subscription-bulk-create-job", - "attributes": { - "list_id": "XUepkK", - "subscriptions": [ - { - "email": "test@rudderstack.com", - "phone_number": "+12 345 578 900", - "channels": { - "email": [ - "MARKETING" - ], - "sms": [ - "MARKETING" - ] - } - } - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Identify call for with flattenProperties enabled (old transformer)", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "flattenProperties": true - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "friend": { - "names": { - "first": "Alice", - "last": "Smith" - }, - "age": 25 - }, - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": - { - "version": "1", - "type": "REST", - "userId": "", - "method": "PATCH", - "endpoint": "https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile", - "attributes": { - "external_id": "user@1", - "email": "test@rudderstack.com", - "first_name": "Test", - "last_name": "Rudderlabs", - "phone_number": "+12 345 578 900", - "title": "Developer", - "organization": "Rudder", - "location": { - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001" - }, - "properties": { - "friend.age": 25, - "friend.names.first": "Alice", - "friend.names.last": "Smith", - "Flagged": false, - "Residence": "Shibuya" - } - }, - "id": "01GW3PHVY0MTCDGS0A1612HARX" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - }, - { - "output": { - "version": "1", - "type": "REST", - "userId": "", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile-subscription-bulk-create-job", - "attributes": { - "list_id": "XUepkK", - "subscriptions": [ - { - "email": "test@rudderstack.com", - "phone_number": "+12 345 578 900", - "channels": { - "email": [ - "MARKETING" - ], - "sms": [ - "MARKETING" - ] - } - } - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Profile updation call and subcribe user", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKeyforfailure" - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test3@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "error": "{\"message\":\"Failed to create user due to \\\"\\\"\",\"destinationResponse\":\"\\\"\\\"\"}", - "statTags": { - "destType": "KLAVIYO", - "errorCategory": "network", - "errorType": "retryable", - "feature": "processor", - "implementation": "native", - "module": "destination" - }, - "statusCode": 500 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Profile updation call listId is not provided for subscribing the user", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "properties": { - "subscribe": false, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "PATCH", - "endpoint": "https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile", - "attributes": { - "external_id": "user@1", - "email": "test@rudderstack.com", - "first_name": "Test", - "last_name": "Rudderlabs", - "phone_number": "+12 345 578 900", - "title": "Developer", - "organization": "Rudder", - "location": { - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001" - }, - "properties": { - "Flagged": false, - "Residence": "Shibuya" - } - }, - "id": "01GW3PHVY0MTCDGS0A1612HARX" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Identify call with enforceEmailAsPrimary enabled from UI", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "enforceEmailAsPrimary": true - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": - { - "version": "1", - "type": "REST", - "userId": "", - "method": "PATCH", - "endpoint": "https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile", - "attributes": { - "email": "test@rudderstack.com", - "first_name": "Test", - "last_name": "Rudderlabs", - "phone_number": "+12 345 578 900", - "title": "Developer", - "organization": "Rudder", - "location": { - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001" - }, - "properties": { - "Flagged": false, - "Residence": "Shibuya", - "_id": "user@1" - } - }, - "id": "01GW3PHVY0MTCDGS0A1612HARX" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - }, - { - "output": { - "version": "1", - "type": "REST", - "userId": "", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile-subscription-bulk-create-job", - "attributes": { - "list_id": "XUepkK", - "subscriptions": [ - { - "email": "test@rudderstack.com", - "phone_number": "+12 345 578 900", - "channels": { - "email": [ - "MARKETING" - ], - "sms": [ - "MARKETING" - ] - } - } - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Identify call without user custom Properties", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "enforceEmailAsPrimary": false - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "email": "test@rudderstack.com", - "phone": "+12 345 578 900", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "userId": "", - "method": "PATCH", - "endpoint": "https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile", - "attributes": { - "email": "test@rudderstack.com", - "first_name": "Test", - "last_name": "Rudderlabs", - "phone_number": "+12 345 578 900", - "external_id": "user@1", - "title": "Developer", - "organization": "Rudder", - "location": { - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001" - } - }, - "id": "01GW3PHVY0MTCDGS0A1612HARX" - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - }, - { - "output": { - "version": "1", - "type": "REST", - "userId": "", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs", - "headers": { - "Content-Type": "application/json", - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "profile-subscription-bulk-create-job", - "attributes": { - "list_id": "XUepkK", - "subscriptions": [ - { - "email": "test@rudderstack.com", - "phone_number": "+12 345 578 900", - "channels": { - "email": [ - "MARKETING" - ], - "sms": [ - "MARKETING" - ] - } - } - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {} - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Identify call without email and phone & enforceEmailAsPrimary enabled from UI", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "enforceEmailAsPrimary": true - } - }, - "message": { - "type": "identify", - "sentAt": "2021-01-03T17:02:53.195Z", - "userId": "user@1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "build": "1.0.0", - "version": "1.1.11", - "namespace": "com.rudderlabs.javascript" - }, - "traits": { - "firstName": "Test", - "lastName": "Rudderlabs", - "userId": "user@1", - "title": "Developer", - "organization": "Rudder", - "city": "Tokyo", - "region": "Kanto", - "country": "JP", - "zip": "100-0001", - "Flagged": false, - "Residence": "Shibuya", - "properties": { - "listId": "XUepkK", - "subscribe": true, - "consent": [ - "email", - "sms" - ] - } - }, - "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", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-03T17:02:53.193Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "error": "None of email and phone are present in the payload", - "statTags": { - "destType": "KLAVIYO", - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "feature": "processor", - "implementation": "native", - "module": "destination" - }, - "statusCode": 400 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Screen event call", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "screen", - "event": "TestEven001", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "TestEven001" - }, - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22" - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track event call with flatten properties enabled", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "flattenProperties": true - } - }, - "message": { - "type": "track", - "event": "TestEven001", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "plan_details": { - "plan_type": "gold", - "duration": "3 months" - } - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "vicePresdentInfo": { - "PreviouslVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "AaronBurr", - "GeorgeClinton" - ] - } - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "TestEven001" - }, - "properties": { - "vicePresdentInfo.PreviouslVicePresident": true, - "vicePresdentInfo.VicePresidents": [ - "AaronBurr", - "GeorgeClinton" - ], - "vicePresdentInfo.YearElected": 1801 - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "plan_details.plan_type": "gold", - "plan_details.duration": "3 months" - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track event call", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "track", - "event": "TestEven002", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "name": "Test", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "description": "Sample description" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ], - "revenue": 3000 - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "TestEven002" - }, - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" - }, - "value": 3000 - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track event call, with make email or phone as primary identifier toggle on", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "enforceEmailAsPrimary": true - } - }, - "message": { - "type": "track", - "event": "TestEven001", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Accept": "application/json", - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "TestEven001" - }, - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "age": "22", - "_id": "sajal12" - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track event call, without email and phone & with (make email or phone as primary identifier) toggle on", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "enforceEmailAsPrimary": true - } - }, - "message": { - "type": "track", - "event": "TestEven001", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "anonymousId": "9c6bd77ea9da3e68" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "PreviouslyVicePresident": true, - "YearElected": 1801, - "VicePresidents": [ - "Aaron Burr", - "George Clinton" - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "error": "None of email and phone are present in the payload", - "statTags": { - "destType": "KLAVIYO", - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "feature": "processor", - "implementation": "native", - "module": "destination" - }, - "statusCode": 400 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "group call", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "userId": "user123", - "type": "group", - "groupId": "XUepkK", - "traits": { - "subscribe": true - }, - "context": { - "traits": { - "email": "test@rudderstack.com", - "phone": "+12 345 678 900", - "consent": [ - "email" - ] - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-01-21T00:21:34.208Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { "output": { "body": { "FORM": {}, "JSON": { "data": { "attributes": { "list_id": "XUepkK", "subscriptions": [{ "email": "test@rudderstack.com", "phone_number": "+12 345 678 900" }] }, "type": "profile-subscription-bulk-create-job" } }, "JSON_ARRAY": {}, "XML": {} }, "endpoint": "https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs", "files": {}, "headers": { "Accept": "application/json", "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", "Content-Type": "application/json", "revision": "2023-02-22" }, "method": "POST", "params": {}, "type": "REST", "userId": "", "version": "1" }, "statusCode": 200 } - ] - } - } - }, - { - "name": "klaviyo", - "description": "group call without groupId", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "userId": "user123", - "type": "group", - "groupId": "", - "traits": { - "subscribe": true - }, - "context": { - "traits": { - "email": "test@rudderstack.com", - "phone": "+12 345 678 900", - "consent": "email" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-01-21T00:21:34.208Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "error": "groupId is a required field for group events", - "statTags": { - "destType": "KLAVIYO", - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "feature": "processor", - "implementation": "native", - "module": "destination" - }, - "statusCode": 400 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "[Error]: Check for unsupported message type", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "userId": "user123", - "type": "random", - "groupId": "XUepkK", - "traits": { - "subscribe": true - }, - "context": { - "traits": { - "email": "test@rudderstack.com", - "phone": "+12 345 678 900", - "consent": "email" - }, - "ip": "14.5.67.21", - "library": { - "name": "http" - } - }, - "timestamp": "2020-01-21T00:21:34.208Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "error": "Event type random is not supported", - "statTags": { - "destType": "KLAVIYO", - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "feature": "processor", - "implementation": "native", - "module": "destination" - }, - "statusCode": 400 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track call with Ecom events (Viewed Product)", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "track", - "event": "product viewed", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "name": "Test", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "description": "Sample description" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "name": "test product", - "product_id": "1114", - "sku": "WINNIePuh12", - "image_url": "http://www.example.com/path/to/product/image.png", - "url": "http://www.example.com/path/to/product", - "brand": "Not for Kids", - "price": 9.9, - "categories": [ - "Fiction", - "Children" - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "Viewed Product" - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" - }, - "properties": { - "ProductName": "test product", - "ProductID": "1114", - "SKU": "WINNIePuh12", - "ImageURL": "http://www.example.com/path/to/product/image.png", - "URL": "http://www.example.com/path/to/product", - "Brand": "Not for Kids", - "Price": 9.9, - "Categories": [ - "Fiction", - "Children" - ] - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track call with Ecom events (Checkout Started) with enabled flattenProperties", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey", - "flattenProperties": true - } - }, - "message": { - "type": "track", - "event": "checkout started", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "name": "Test", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "description": "Sample description" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "order_id": "1234", - "affiliation": "Apple Store", - "value": 20, - "revenue": 15, - "shipping": 4, - "tax": 1, - "discount": 1.5, - "coupon": "ImagePro", - "currency": "USD", - "products": [ - { - "product_id": "123", - "sku": "G-32", - "name": "Monopoly", - "price": 14, - "quantity": 1, - "category": "Games", - "url": "https://www.website.com/product/path", - "image_url": "https://www.website.com/product/path.jpg" - }, - { - "product_id": "345", - "sku": "F-32", - "name": "UNO", - "price": 3.45, - "quantity": 2, - "category": "Games" - } - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "Started Checkout" - }, - "properties": { - "$event_id": "1234", - "$value": 20, - "items[0].ProductID": "123", - "items[0].SKU": "G-32", - "items[0].ProductName": "Monopoly", - "items[0].Quantity": 1, - "items[0].ItemPrice": 14, - "items[0].ProductURL": "https://www.website.com/product/path", - "items[0].ImageURL": "https://www.website.com/product/path.jpg", - "items[1].ProductID": "345", - "items[1].SKU": "F-32", - "items[1].ProductName": "UNO", - "items[1].Quantity": 2, - "items[1].ItemPrice": 3.45 - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "klaviyo", - "description": "Track call with Ecom events (Added to Cart) with properties.products", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "publicApiKey": "dummyPublicApiKey", - "privateApiKey": "dummyPrivateApiKey" - } - }, - "message": { - "type": "track", - "event": "product added", - "sentAt": "2021-01-25T16:12:02.048Z", - "userId": "sajal12", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "10" - }, - "app": { - "name": "KlaviyoTest", - "build": "1", - "version": "1.0", - "namespace": "com.rudderstack.android.rudderstack.sampleAndroidApp" - }, - "device": { - "id": "9c6bd77ea9da3e68", - "name": "raphaelin", - "type": "android", - "model": "Redmi K20 Pro", - "manufacturer": "Xiaomi" - }, - "locale": "en-IN", - "screen": { - "width": 1080, - "height": 2210, - "density": 440 - }, - "traits": { - "id": "user@1", - "age": "22", - "name": "Test", - "email": "test@rudderstack.com", - "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "description": "Sample description" - }, - "library": { - "name": "com.rudderstack.android.sdk.core", - "version": "1.0.2" - }, - "network": { - "wifi": true, - "carrier": "airtel", - "cellular": true, - "bluetooth": false - }, - "timezone": "Asia/Kolkata", - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.4.0.QFKINXM)" - }, - "rudderId": "b7b24f86-f7bf-46d8-b2b4-ccafc080239c", - "messageId": "1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce", - "properties": { - "order_id": "1234", - "value": 12.12, - "categories": [ - "Fiction3", - "Children3" - ], - "checkout_url": "http://www.heythere.com", - "item_names": [ - "book1", - "book2" - ], - "products": [ - { - "product_id": "b1pid", - "sku": "123x", - "name": "book1", - "url": "heyther.com", - "price": 12 - }, - { - "product_id": "b2pid", - "sku": "123x", - "name": "book2", - "url": "heyther2.com", - "price": 14 - } - ] - }, - "anonymousId": "9c6bd77ea9da3e68", - "integrations": { - "All": true - }, - "originalTimestamp": "2021-01-25T15:32:56.409Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://a.klaviyo.com/api/events", - "headers": { - "Authorization": "Klaviyo-API-Key dummyPrivateApiKey", - "Content-Type": "application/json", - "Accept": "application/json", - "revision": "2023-02-22" - }, - "params": {}, - "body": { - "JSON": { - "data": { - "type": "event", - "attributes": { - "metric": { - "name": "Added to Cart" - }, - "profile": { - "$email": "test@rudderstack.com", - "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" - }, - "properties": { - "$value": 12.12, - "AddedItemCategories": [ - "Fiction3", - "Children3" - ], - "ItemNames": [ - "book1", - "book2" - ], - "CheckoutURL": "http://www.heythere.com", - "items": [ - { - "ProductID": "b1pid", - "SKU": "123x", - "ProductName": "book1", - "ItemPrice": 12, - "ProductURL": "heyther.com" - }, - { - "ProductID": "b2pid", - "SKU": "123x", - "ProductName": "book2", - "ItemPrice": 14, - "ProductURL": "heyther2.com" - } - ] - } - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - } -] \ No newline at end of file + ...identifyData, + ...trackTestData, + ...screenTestData, + ...groupTestData, + ...ecomTestData, + ...validationTestData, +]; diff --git a/test/integrations/destinations/klaviyo/processor/ecomTestData.ts b/test/integrations/destinations/klaviyo/processor/ecomTestData.ts new file mode 100644 index 0000000000..fab4cf85ce --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/ecomTestData.ts @@ -0,0 +1,344 @@ +import { overrideDestination, transformResultBuilder } from '../../../testUtils'; + +const destination = { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, +}; + +const commonTraits = { + id: 'user@1', + age: '22', + name: 'Test', + email: 'test@rudderstack.com', + phone: '9112340375', + anonymousId: '9c6bd77ea9da3e68', + description: 'Sample description', +}; + +const eventsEndpoint = 'https://a.klaviyo.com/api/events'; + +const commonOutputHeaders = { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2023-02-22', +}; + +export const ecomTestData = [ + { + id: 'klaviyo-ecom-test-1', + name: 'klaviyo', + description: 'Track call with Ecom events (Viewed Product)', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload the event name should be Viewed Product and the properties should be mapped to the Klaviyo event properties', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + event: 'product viewed', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + channel: 'mobile', + context: { + traits: commonTraits, + }, + properties: { + name: 'test product', + product_id: '1114', + sku: 'WINNIePuh12', + image_url: 'http://www.example.com/path/to/product/image.png', + url: 'http://www.example.com/path/to/product', + brand: 'Not for Kids', + price: 9.9, + categories: ['Fiction', 'Children'], + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventsEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'Viewed Product', + }, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + name: 'Test', + description: 'Sample description', + }, + properties: { + ProductName: 'test product', + ProductID: '1114', + SKU: 'WINNIePuh12', + ImageURL: 'http://www.example.com/path/to/product/image.png', + URL: 'http://www.example.com/path/to/product', + Brand: 'Not for Kids', + Price: 9.9, + Categories: ['Fiction', 'Children'], + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-ecom-test-2', + name: 'klaviyo', + description: 'Track call with Ecom events (Checkout Started) with enabled flattenProperties', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload the event name should be Started Checkout and the properties should be mapped to the Klaviyo event properties with flattened properties', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { flattenProperties: true }), + message: { + type: 'track', + event: 'checkout started', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + channel: 'mobile', + context: { + traits: commonTraits, + }, + properties: { + order_id: '1234', + affiliation: 'Apple Store', + value: 20, + revenue: 15, + shipping: 4, + tax: 1, + discount: 1.5, + coupon: 'ImagePro', + currency: 'USD', + products: [ + { + product_id: '123', + sku: 'G-32', + name: 'Monopoly', + price: 14, + quantity: 1, + category: 'Games', + url: 'https://www.website.com/product/path', + image_url: 'https://www.website.com/product/path.jpg', + }, + { + product_id: '345', + sku: 'F-32', + name: 'UNO', + price: 3.45, + quantity: 2, + category: 'Games', + }, + ], + }, + anonymousId: '9c6bd77ea9da3e68', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventsEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'Started Checkout', + }, + properties: { + $event_id: '1234', + $value: 20, + 'items[0].ProductID': '123', + 'items[0].SKU': 'G-32', + 'items[0].ProductName': 'Monopoly', + 'items[0].Quantity': 1, + 'items[0].ItemPrice': 14, + 'items[0].ProductURL': 'https://www.website.com/product/path', + 'items[0].ImageURL': 'https://www.website.com/product/path.jpg', + 'items[1].ProductID': '345', + 'items[1].SKU': 'F-32', + 'items[1].ProductName': 'UNO', + 'items[1].Quantity': 2, + 'items[1].ItemPrice': 3.45, + }, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + name: 'Test', + description: 'Sample description', + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-ecom-test-3', + name: 'klaviyo', + description: 'Track call with Ecom events (Added to Cart) with properties.products', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload the event name should be Added to Cart and the properties should be mapped to the Klaviyo event properties with flattened properties and products array should be mapped to items array in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + event: 'product added', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + channel: 'mobile', + context: { + traits: commonTraits, + }, + rudderId: 'b7b24f86-f7bf-46d8-b2b4-ccafc080239c', + messageId: '1611588776408-ee5a3212-fbf9-4cbb-bbad-3ed0f7c6a2ce', + properties: { + order_id: '1234', + value: 12.12, + categories: ['Fiction3', 'Children3'], + checkout_url: 'http://www.heythere.com', + item_names: ['book1', 'book2'], + products: [ + { + product_id: 'b1pid', + sku: '123x', + name: 'book1', + url: 'heyther.com', + price: 12, + }, + { + product_id: 'b2pid', + sku: '123x', + name: 'book2', + url: 'heyther2.com', + price: 14, + }, + ], + }, + anonymousId: '9c6bd77ea9da3e68', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'Added to Cart', + }, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + name: 'Test', + description: 'Sample description', + }, + properties: { + $value: 12.12, + AddedItemCategories: ['Fiction3', 'Children3'], + ItemNames: ['book1', 'book2'], + CheckoutURL: 'http://www.heythere.com', + items: [ + { + ProductID: 'b1pid', + SKU: '123x', + ProductName: 'book1', + ItemPrice: 12, + ProductURL: 'heyther.com', + }, + { + ProductID: 'b2pid', + SKU: '123x', + ProductName: 'book2', + ItemPrice: 14, + ProductURL: 'heyther2.com', + }, + ], + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/groupTestData.ts b/test/integrations/destinations/klaviyo/processor/groupTestData.ts new file mode 100644 index 0000000000..031c949c4b --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/groupTestData.ts @@ -0,0 +1,136 @@ +import { generateSimplifiedGroupPayload, transformResultBuilder } from '../../../testUtils'; + +const destination = { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, +}; + +const headers = { + Accept: 'application/json', + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + revision: '2023-02-22', +}; + +const commonEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; + +export const groupTestData = [ + { + id: 'klaviyo-group-test-1', + name: 'klaviyo', + description: 'Simple group call', + scenario: 'Business', + successCriteria: + 'Response should contain only group payload and status code should be 200, for the group payload a subscription payload should be present in the final payload with email and phone', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedGroupPayload({ + userId: 'user123', + groupId: 'XUepkK', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: ['email'], + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + JSON: { + data: { + attributes: { + list_id: 'XUepkK', + subscriptions: [ + { email: 'test@rudderstack.com', phone_number: '+12 345 678 900' }, + ], + }, + type: 'profile-subscription-bulk-create-job', + }, + }, + endpoint: commonEndpoint, + headers: headers, + method: 'POST', + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-group-test-2', + name: 'klaviyo', + description: 'Simple group call without groupId', + scenario: 'Business', + successCriteria: + 'Response should contain error message and status code should be 400, as we are not sending groupId in the payload and groupId is a required field for group events', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedGroupPayload({ + userId: 'user123', + groupId: '', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'groupId is a required field for group events', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/identifyTestData.ts b/test/integrations/destinations/klaviyo/processor/identifyTestData.ts new file mode 100644 index 0000000000..8b5503fad9 --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/identifyTestData.ts @@ -0,0 +1,551 @@ +import { removeUndefinedAndNullValues } from '@rudderstack/integrations-lib'; +import { + overrideDestination, + transformResultBuilder, + generateSimplifiedIdentifyPayload, +} from '../../../testUtils'; + +const destination = { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, +}; + +const commonTraits = { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test@rudderstack.com', + phone: '+12 345 578 900', + userId: 'user@1', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + properties: { + listId: 'XUepkK', + subscribe: true, + consent: ['email', 'sms'], + }, +}; + +const commonOutputUserProps = { + external_id: 'user@1', + email: 'test@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + }, + properties: { + Flagged: false, + Residence: 'Shibuya', + }, +}; + +const commonOutputSubscriptionProps = { + list_id: 'XUepkK', + subscriptions: [ + { + email: 'test@rudderstack.com', + phone_number: '+12 345 578 900', + channels: { + email: ['MARKETING'], + sms: ['MARKETING'], + }, + }, + ], +}; + +const commonOutputHeaders = { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2023-02-22', +}; + +const anonymousId = '97c46c81-3140-456d-b2a9-690d70aaca35'; +const userId = 'user@1'; +const sentAt = '2021-01-03T17:02:53.195Z'; +const originalTimestamp = '2021-01-03T17:02:53.193Z'; +const commonUserUpdateEndpoint = 'https://a.klaviyo.com/api/profiles/01GW3PHVY0MTCDGS0A1612HARX'; +const subscribeEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; + +export const identifyData = [ + { + id: 'klaviyo-identify-test-1', + name: 'klaviyo', + description: + 'Identify and Subscribe user where the user doesnot exists[mock] (without suppression status code feature from server)', + scenario: 'Business + Framework', + successCriteria: + 'Response should containt two payloads one for profile updation and other for subscription, response status code should be 200', + comment: + 'Reasoning: As suppression status code feature is not enabled from server, so we would expect 2 responses from transformer one for profile updation (deafult behaviour) and other for subscription', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedIdentifyPayload({ + context: { + traits: commonTraits, + }, + anonymousId, + userId, + sentAt, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'PATCH', + endpoint: commonUserUpdateEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: commonOutputUserProps, + id: '01GW3PHVY0MTCDGS0A1612HARX', + }, + }, + }), + statusCode: 200, + }, + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + }, + }, + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-2', + name: 'klaviyo', + description: 'Identify call for with flattenProperties enabled in destination config', + scenario: 'Business', + successCriteria: + 'The profile updation response should contain the flattened properties of the friend object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { flattenProperties: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: { + ...commonTraits, + friend: { + names: { + first: 'Alice', + last: 'Smith', + }, + age: 25, + }, + }, + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'PATCH', + endpoint: commonUserUpdateEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + id: '01GW3PHVY0MTCDGS0A1612HARX', + attributes: { + ...commonOutputUserProps, + properties: { + ...commonOutputUserProps.properties, + 'friend.age': 25, + 'friend.names.first': 'Alice', + 'friend.names.last': 'Smith', + }, + }, + }, + }, + }), + statusCode: 200, + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + }, + }, + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-3', + name: 'klaviyo', + description: 'Negative Test Case for Profile updation call and subcribe user', + scenario: 'Business + Framework', + successCriteria: + 'Response should contain error message and status code should be 500, as we are getting a network error from klaviyo', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKeyforfailure', + }, + }, + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: { + ...commonTraits, + email: 'test3@rudderstack.com', + }, + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + '{"message":"Failed to create user due to \\"\\"","destinationResponse":"\\"\\""}', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'network', + errorType: 'retryable', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 500, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-4', + name: 'klaviyo', + description: 'Profile create update without subscribing the user', + scenario: 'Business', + successCriteria: + 'Response should contain only profile update payload and status code should be 200 as subscribe is set to false in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: { + ...commonTraits, + properties: { ...commonTraits.properties, subscribe: false }, + }, + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'PATCH', + endpoint: commonUserUpdateEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: commonOutputUserProps, + id: '01GW3PHVY0MTCDGS0A1612HARX', + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-5', + name: 'klaviyo', + description: 'Identify call with enforceEmailAsPrimary enabled in destination config', + scenario: 'Business', + successCriteria: + 'Response should contain two payloads one for profile updation and other for subscription, response status code should be 200, for the profile updation payload there should be no external_id field in the payload as enforceEmailAsPrimary is set to true in the destination config and the userId should be mapped to _id field in the properties object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: commonTraits, + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'PATCH', + endpoint: commonUserUpdateEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: removeUndefinedAndNullValues({ + ...commonOutputUserProps, + properties: { + ...commonOutputUserProps.properties, + _id: userId, + }, + // remove external_id from the payload + external_id: undefined, + }), + id: '01GW3PHVY0MTCDGS0A1612HARX', + }, + }, + }), + statusCode: 200, + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + }, + }, + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-6', + name: 'klaviyo', + description: 'Identify call without user custom Properties', + scenario: 'Business', + successCriteria: + 'Response should contain two payloads one for profile updation and other for subscription, response status code should be 200, for the profile updation payload does not have any custom properties in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: destination, + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: removeUndefinedAndNullValues({ + ...commonTraits, + Flagged: undefined, + Residence: undefined, + }), + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'PATCH', + endpoint: commonUserUpdateEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: removeUndefinedAndNullValues({ + ...commonOutputUserProps, + properties: undefined, + }), + id: '01GW3PHVY0MTCDGS0A1612HARX', + }, + }, + }), + statusCode: 200, + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + }, + }, + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-test-7', + name: 'klaviyo', + description: 'Identify call without email and phone & enforceEmailAsPrimary enabled from UI', + scenario: 'Business', + successCriteria: + 'Response should contain error message and status code should be 400, as we are not sending email and phone in the payload and enforceEmailAsPrimary is enabled from UI', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: removeUndefinedAndNullValues({ + ...commonTraits, + email: undefined, + phone: undefined, + }), + }, + anonymousId, + originalTimestamp, + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'None of email and phone are present in the payload', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/screenTestData.ts b/test/integrations/destinations/klaviyo/processor/screenTestData.ts new file mode 100644 index 0000000000..3779747a4e --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/screenTestData.ts @@ -0,0 +1,97 @@ +import { generateSimplifiedPageOrScreenPayload, transformResultBuilder } from '../../../testUtils'; + +const destination = { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, +}; + +export const screenTestData = [ + { + id: 'klaviyo-screen-test-1', + name: 'klaviyo', + description: 'Screen event call with properties and contextual traits', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain properties and contextual traits in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedPageOrScreenPayload( + { + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + id: 'user@1', + age: '22', + email: 'test@rudderstack.com', + phone: '9112340375', + anonymousId: '9c6bd77ea9da3e68', + }, + }, + properties: { + PreviouslyVicePresident: true, + YearElected: 1801, + VicePresidents: ['Aaron Burr', 'George Clinton'], + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + 'screen', + ), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Accept: 'application/json', + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + revision: '2023-02-22', + }, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'TestEven001', + }, + properties: { + PreviouslyVicePresident: true, + YearElected: 1801, + VicePresidents: ['Aaron Burr', 'George Clinton'], + }, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/trackTestData.ts b/test/integrations/destinations/klaviyo/processor/trackTestData.ts new file mode 100644 index 0000000000..f3bbfb96b9 --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/trackTestData.ts @@ -0,0 +1,316 @@ +import { + generateSimplifiedTrackPayload, + generateTrackPayload, + overrideDestination, + transformResultBuilder, +} from '../../../testUtils'; + +const destination = { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, +}; + +const commonTraits = { + id: 'user@1', + age: '22', + anonymousId: '9c6bd77ea9da3e68', +}; + +const commonProps = { + PreviouslVicePresident: true, + YearElected: 1801, + VicePresidents: ['AaronBurr', 'GeorgeClinton'], +}; + +const commonOutputHeaders = { + Accept: 'application/json', + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + revision: '2023-02-22', +}; + +const eventEndPoint = 'https://a.klaviyo.com/api/events'; + +export const trackTestData = [ + { + id: 'klaviyo-track-test-1', + name: 'klaviyo', + description: 'Track event call with flatten properties enabled in destination config', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain flattened properties in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { flattenProperties: true }), + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + email: 'test@rudderstack.com', + phone: '9112340375', + plan_details: { + plan_type: 'gold', + duration: '3 months', + }, + }, + }, + properties: { + vicePresdentInfo: commonProps, + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventEndPoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'TestEven001', + }, + properties: { + 'vicePresdentInfo.PreviouslVicePresident': true, + 'vicePresdentInfo.VicePresidents': ['AaronBurr', 'GeorgeClinton'], + 'vicePresdentInfo.YearElected': 1801, + }, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + 'plan_details.plan_type': 'gold', + 'plan_details.duration': '3 months', + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-track-test-2', + name: 'klaviyo', + description: 'Simple track event call', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven002', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + name: 'Test', + email: 'test@rudderstack.com', + phone: '9112340375', + description: 'Sample description', + }, + }, + properties: { + ...commonProps, + revenue: 3000, + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventEndPoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'TestEven002', + }, + properties: commonProps, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + $id: 'sajal12', + age: '22', + name: 'Test', + description: 'Sample description', + }, + value: 3000, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-track-test-3', + name: 'klaviyo', + description: 'Track event call, with make email or phone as primary identifier toggle on', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload, and email should be mapped to $email and userId should be mapped to _id', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + email: 'test@rudderstack.com', + phone: '9112340375', + }, + }, + properties: commonProps, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventEndPoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + name: 'TestEven001', + }, + properties: commonProps, + profile: { + $email: 'test@rudderstack.com', + $phone_number: '9112340375', + age: '22', + _id: 'sajal12', + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'klaviyo-track-test-4', + name: 'klaviyo', + description: + 'Track event call, without email and phone & with (make email or phone as primary identifier) toggle on', + scenario: 'Business', + successCriteria: + 'Response should contain error message and status code should be 400, as we are not sending email and phone in the payload and enforceEmailAsPrimary is enabled from UI', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: commonTraits, + }, + properties: commonProps, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'None of email and phone are present in the payload', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/validationTestData.ts b/test/integrations/destinations/klaviyo/processor/validationTestData.ts new file mode 100644 index 0000000000..59556cfe5f --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/validationTestData.ts @@ -0,0 +1,62 @@ +export const validationTestData = [ + { + id: 'klaviyo-validation-test-1', + name: 'klaviyo', + description: '[Error]: Check for unsupported message type', + scenario: 'Framework', + successCriteria: + 'Response should contain error message and status code should be 400, as we are sending a message type which is not supported by Klaviyo destination and the error message should be Event type random is not supported', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + publicApiKey: 'dummyPublicApiKey', + privateApiKey: 'dummyPrivateApiKey', + }, + }, + message: { + userId: 'user123', + type: 'random', + groupId: 'XUepkK', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type random is not supported', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/router/data.ts b/test/integrations/destinations/klaviyo/router/data.ts index 0fb735d6bf..818089a722 100644 --- a/test/integrations/destinations/klaviyo/router/data.ts +++ b/test/integrations/destinations/klaviyo/router/data.ts @@ -1,7 +1,10 @@ export const data = [ { + id: 'klaviyo-router-test-1', name: 'klaviyo', - description: 'Test 0', + description: 'Basic Router Test to test multiple payloads', + scenario: 'Framework', + successCriteria: 'All the subscription events should be batched', feature: 'router', module: 'destination', version: 'v0', @@ -11,24 +14,16 @@ export const data = [ input: [ { destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, - }, - metadata: { - jobId: 1, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'identify', sentAt: '2021-01-03T17:02:53.195Z', userId: 'test', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -49,18 +44,11 @@ export const data = [ zip: '100-0001', Flagged: false, Residence: 'Shibuya', - properties: { - consent: ['email', 'sms'], - }, + properties: { consent: ['email', 'sms'] }, }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -68,32 +56,22 @@ export const data = [ rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-01-03T17:02:53.193Z', }, }, { destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, - }, - metadata: { - jobId: 2, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'identify', sentAt: '2021-01-03T17:02:53.195Z', userId: 'test', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -114,20 +92,11 @@ export const data = [ zip: '100-0001', Flagged: false, Residence: 'Shibuya', - properties: { - listId: 'XUepkK', - subscribe: true, - consent: ['email', 'sms'], - }, + properties: { listId: 'XUepkK', subscribe: true, consent: ['email', 'sms'] }, }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -135,29 +104,20 @@ export const data = [ rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-01-03T17:02:53.193Z', }, }, { destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, - }, - metadata: { - jobId: 3, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, + metadata: { jobId: 3, userId: 'u1' }, message: { userId: 'user123', type: 'group', groupId: 'XUepkK', - traits: { - subscribe: true, - }, + traits: { subscribe: true }, context: { traits: { email: 'test@rudderstack.com', @@ -165,30 +125,21 @@ export const data = [ consent: ['email'], }, ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, }, timestamp: '2020-01-21T00:21:34.208Z', }, }, { destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, - }, - metadata: { - jobId: 4, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, + metadata: { jobId: 4, userId: 'u1' }, message: { userId: 'user123', type: 'random', groupId: 'XUepkK', - traits: { - subscribe: true, - }, + traits: { subscribe: true }, context: { traits: { email: 'test@rudderstack.com', @@ -196,30 +147,21 @@ export const data = [ consent: 'email', }, ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, }, timestamp: '2020-01-21T00:21:34.208Z', }, }, { destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, - }, - metadata: { - jobId: 5, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, + metadata: { jobId: 5, userId: 'u1' }, message: { userId: 'user123', type: 'group', groupId: '', - traits: { - subscribe: true, - }, + traits: { subscribe: true }, context: { traits: { email: 'test@rudderstack.com', @@ -227,9 +169,7 @@ export const data = [ consent: 'email', }, ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, }, timestamp: '2020-01-21T00:21:34.208Z', }, @@ -265,17 +205,11 @@ export const data = [ attributes: { list_id: 'XUepkK', subscriptions: [ - { - email: 'test@rudderstack.com', - phone_number: '+12 345 678 900', - }, + { email: 'test@rudderstack.com', phone_number: '+12 345 678 900' }, { email: 'test@rudderstack.com', phone_number: '+12 345 578 900', - channels: { - email: ['MARKETING'], - sms: ['MARKETING'], - }, + channels: { email: ['MARKETING'], sms: ['MARKETING'] }, }, ], }, @@ -317,10 +251,7 @@ export const data = [ country: 'JP', zip: '100-0001', }, - properties: { - Flagged: false, - Residence: 'Shibuya', - }, + properties: { Flagged: false, Residence: 'Shibuya' }, }, id: '01GW3PHVY0MTCDGS0A1612HARX', }, @@ -333,20 +264,13 @@ export const data = [ }, ], metadata: [ - { - jobId: 3, - }, - { - jobId: 2, - }, + { jobId: 3, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: true, statusCode: 200, destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, }, { @@ -380,10 +304,7 @@ export const data = [ country: 'JP', zip: '100-0001', }, - properties: { - Flagged: false, - Residence: 'Shibuya', - }, + properties: { Flagged: false, Residence: 'Shibuya' }, }, id: '01GW3PHVY0MTCDGS0A1612HARX', }, @@ -394,26 +315,15 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, }, { - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 400, error: 'Event type random is not supported', @@ -426,18 +336,11 @@ export const data = [ module: 'destination', }, destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, }, { - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: false, statusCode: 400, error: 'groupId is a required field for group events', @@ -450,10 +353,7 @@ export const data = [ module: 'destination', }, destination: { - Config: { - publicApiKey: 'dummyPublicApiKey', - privateApiKey: 'dummyPrivateApiKey', - }, + Config: { publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey' }, }, }, ], diff --git a/test/integrations/destinations/kustomer/router/data.ts b/test/integrations/destinations/kustomer/router/data.ts index 6dae5d5e76..06f6243cf2 100644 --- a/test/integrations/destinations/kustomer/router/data.ts +++ b/test/integrations/destinations/kustomer/router/data.ts @@ -75,15 +75,9 @@ export const data = [ integrations: { All: true }, originalTimestamp: '2021-01-03T17:02:53.193Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummyApiKey', - genericPage: false, - genericScreen: false, - }, + Config: { apiKey: 'dummyApiKey', genericPage: false, genericScreen: false }, }, }, { @@ -128,15 +122,9 @@ export const data = [ integrations: { All: true }, originalTimestamp: '2021-01-03T17:02:53.195Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummyApiKey', - genericPage: false, - genericScreen: false, - }, + Config: { apiKey: 'dummyApiKey', genericPage: false, genericScreen: false }, }, }, { @@ -181,9 +169,7 @@ export const data = [ integrations: { All: true }, originalTimestamp: '2021-01-03T17:02:53.195Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { baseEndpoint: 'https://api.prod2.kustomerapp.com', @@ -245,29 +231,10 @@ export const data = [ }, ], birthdayAt: '2005-01-01T23:28:56.782Z', - emails: [ - { - type: 'home', - email: 'test@rudderstack.com', - }, - ], - phones: [ - { - type: 'home', - phone: '+12345578900', - }, - ], - urls: [ - { - url: 'www.mattertoast873.com', - }, - ], - locations: [ - { - type: 'home', - address: '24 Dovers Lane Miami Florida 1890001', - }, - ], + emails: [{ type: 'home', email: 'test@rudderstack.com' }], + phones: [{ type: 'home', phone: '+12345578900' }], + urls: [{ url: 'www.mattertoast873.com' }], + locations: [{ type: 'home', address: '24 Dovers Lane Miami Florida 1890001' }], }, XML: {}, JSON_ARRAY: {}, @@ -275,19 +242,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - genericPage: false, - genericScreen: false, - }, + Config: { apiKey: 'dummyApiKey', genericPage: false, genericScreen: false }, }, }, { @@ -303,17 +262,12 @@ export const data = [ params: {}, body: { JSON: { - identity: { - externalId: 'user@doe', - }, + identity: { externalId: 'user@doe' }, event: { name: 'Tracking-Weekender', sessionId: '63nsa22', trackingId: 'sahetwiac', - meta: { - YearServicedNum: 211, - region: 'strapis', - }, + meta: { YearServicedNum: 211, region: 'strapis' }, }, }, XML: {}, @@ -322,19 +276,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - genericPage: false, - genericScreen: false, - }, + Config: { apiKey: 'dummyApiKey', genericPage: false, genericScreen: false }, }, }, { @@ -350,17 +296,12 @@ export const data = [ params: {}, body: { JSON: { - identity: { - externalId: 'user@doe', - }, + identity: { externalId: 'user@doe' }, event: { name: 'Tracking-Weekender', sessionId: '63nsa22', trackingId: 'sahetwiac', - meta: { - YearServicedNum: 211, - region: 'strapis', - }, + meta: { YearServicedNum: 211, region: 'strapis' }, }, }, XML: {}, @@ -369,11 +310,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/lambda/router/data.ts b/test/integrations/destinations/lambda/router/data.ts index 37b13e4d2a..cba30e0974 100644 --- a/test/integrations/destinations/lambda/router/data.ts +++ b/test/integrations/destinations/lambda/router/data.ts @@ -8115,9 +8115,7 @@ export const data = [ ], trait1: 'new-val', }, - library: { - name: 'http', - }, + library: { name: 'http' }, }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', @@ -16532,9 +16530,7 @@ export const data = [ ], trait1: 'new-val', }, - library: { - name: 'http', - }, + library: { name: 'http' }, }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', @@ -16655,12 +16651,7 @@ export const data = [ event: 'Product Purchased new', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', timestamp: '2020-02-02T00:23:09.544Z', @@ -20622,12 +20613,7 @@ export const data = [ event: 'Product Purchased new', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', timestamp: '2020-02-02T00:23:09.544Z', @@ -24863,19 +24849,11 @@ export const data = [ type: 'page', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - path: '/', - title: 'Home', - }, + properties: { path: '/', title: 'Home' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -24906,19 +24884,11 @@ export const data = [ type: 'page', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - path: '/', - title: 'Home', - }, + properties: { path: '/', title: 'Home' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -25035,18 +25005,11 @@ export const data = [ type: 'screen', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - prop1: '5', - }, + properties: { prop1: '5' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -25077,18 +25040,11 @@ export const data = [ type: 'screen', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - prop1: '5', - }, + properties: { prop1: '5' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -25203,20 +25159,12 @@ export const data = [ message: { type: 'group', sentAt: '2022-08-18T08:43:15.539+05:30', - traits: { - name: 'Company', - industry: 'Industry', - employees: 123, - }, + traits: { name: 'Company', industry: 'Industry', employees: 123 }, userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, groupId: 'group1', rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', @@ -25249,20 +25197,12 @@ export const data = [ EventPayload: { type: 'group', sentAt: '2022-08-18T08:43:15.539+05:30', - traits: { - name: 'Company', - industry: 'Industry', - employees: 123, - }, + traits: { name: 'Company', industry: 'Industry', employees: 123 }, userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, groupId: 'group1', rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', @@ -25384,12 +25324,8 @@ export const data = [ userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', @@ -25425,12 +25361,8 @@ export const data = [ userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', @@ -25560,11 +25492,7 @@ export const data = [ batchedRequest: { payload: '[{"type":"track","event":"Product Purchased new","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"9f8fb785-c720-4381-a009-bf22a13f4ced","timestamp":"2020-02-02T00:23:09.544Z","properties":{"data":[{"id":6104546,"url":"https://api.github.com/repos/mralexgray/-REPONAME","fork":false,"name":"-REPONAME","size":48,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/-REPONAME.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk2MTA0NTQ2","private":false,"ssh_url":"git@github.com:mralexgray/-REPONAME.git","svn_url":"https://github.com/mralexgray/-REPONAME","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/-REPONAME","keys_url":"https://api.github.com/repos/mralexgray/-REPONAME/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/-REPONAME/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/-REPONAME.git","forks_url":"https://api.github.com/repos/mralexgray/-REPONAME/forks","full_name":"mralexgray/-REPONAME","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/-REPONAME/hooks","pulls_url":"https://api.github.com/repos/mralexgray/-REPONAME/pulls{/number}","pushed_at":"2012-10-06T16:37:39Z","teams_url":"https://api.github.com/repos/mralexgray/-REPONAME/teams","trees_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/trees{/sha}","created_at":"2012-10-06T16:37:39Z","events_url":"https://api.github.com/repos/mralexgray/-REPONAME/events","has_issues":true,"issues_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/-REPONAME/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/-REPONAME/merges","mirror_url":null,"updated_at":"2013-01-12T13:39:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/-REPONAME/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/-REPONAME/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/-REPONAME/compare/{base}...{head}","description":null,"forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/-REPONAME/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/-REPONAME/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/-REPONAME/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/-REPONAME/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/-REPONAME/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/-REPONAME/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/-REPONAME/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/-REPONAME/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/-REPONAME/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/-REPONAME/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/-REPONAME/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/-REPONAME/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/-REPONAME/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/-REPONAME/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/-REPONAME/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/-REPONAME/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/-REPONAME/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/-REPONAME/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":104510411,"url":"https://api.github.com/repos/mralexgray/...","fork":true,"name":"...","size":113,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/....git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ1MTA0MTE=","private":false,"ssh_url":"git@github.com:mralexgray/....git","svn_url":"https://github.com/mralexgray/...","archived":false,"disabled":false,"has_wiki":false,"homepage":"https://driesvints.com/blog/getting-started-with-dotfiles","html_url":"https://github.com/mralexgray/...","keys_url":"https://api.github.com/repos/mralexgray/.../keys{/key_id}","language":"Shell","tags_url":"https://api.github.com/repos/mralexgray/.../tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/.../git/blobs{/sha}","clone_url":"https://github.com/mralexgray/....git","forks_url":"https://api.github.com/repos/mralexgray/.../forks","full_name":"mralexgray/...","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/.../hooks","pulls_url":"https://api.github.com/repos/mralexgray/.../pulls{/number}","pushed_at":"2017-09-15T08:27:32Z","teams_url":"https://api.github.com/repos/mralexgray/.../teams","trees_url":"https://api.github.com/repos/mralexgray/.../git/trees{/sha}","created_at":"2017-09-22T19:19:42Z","events_url":"https://api.github.com/repos/mralexgray/.../events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/.../issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/.../labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/.../merges","mirror_url":null,"updated_at":"2017-09-22T19:20:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/.../{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/.../commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/.../compare/{base}...{head}","description":":computer: Public repo for my personal dotfiles.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/.../branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/.../comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/.../contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/.../git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/.../git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/.../releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/.../statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/.../assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/.../downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/.../languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/.../milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/.../stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/.../deployments","git_commits_url":"https://api.github.com/repos/mralexgray/.../git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/.../subscribers","contributors_url":"https://api.github.com/repos/mralexgray/.../contributors","issue_events_url":"https://api.github.com/repos/mralexgray/.../issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/.../subscription","collaborators_url":"https://api.github.com/repos/mralexgray/.../collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/.../issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/.../notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":58656723,"url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol","fork":true,"name":"2200087-Serial-Protocol","size":41,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/2200087-Serial-Protocol.git","license":{"key":"gpl-2.0","url":"https://api.github.com/licenses/gpl-2.0","name":"GNU General Public License v2.0","node_id":"MDc6TGljZW5zZTg=","spdx_id":"GPL-2.0"},"node_id":"MDEwOlJlcG9zaXRvcnk1ODY1NjcyMw==","private":false,"ssh_url":"git@github.com:mralexgray/2200087-Serial-Protocol.git","svn_url":"https://github.com/mralexgray/2200087-Serial-Protocol","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://daviddworken.com","html_url":"https://github.com/mralexgray/2200087-Serial-Protocol","keys_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/keys{/key_id}","language":"Python","tags_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/2200087-Serial-Protocol.git","forks_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/forks","full_name":"mralexgray/2200087-Serial-Protocol","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/hooks","pulls_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/pulls{/number}","pushed_at":"2016-05-12T16:07:24Z","teams_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/teams","trees_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/trees{/sha}","created_at":"2016-05-12T16:05:28Z","events_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/merges","mirror_url":null,"updated_at":"2016-05-12T16:05:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/compare/{base}...{head}","description":"A reverse engineered protocol description and accompanying code for Radioshack\'s 2200087 multimeter","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/2200087-Serial-Protocol/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13121042,"url":"https://api.github.com/repos/mralexgray/ace","fork":true,"name":"ace","size":21080,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ace.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMzEyMTA0Mg==","private":false,"ssh_url":"git@github.com:mralexgray/ace.git","svn_url":"https://github.com/mralexgray/ace","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://ace.c9.io","html_url":"https://github.com/mralexgray/ace","keys_url":"https://api.github.com/repos/mralexgray/ace/keys{/key_id}","language":"JavaScript","tags_url":"https://api.github.com/repos/mralexgray/ace/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ace/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ace.git","forks_url":"https://api.github.com/repos/mralexgray/ace/forks","full_name":"mralexgray/ace","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ace/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ace/pulls{/number}","pushed_at":"2013-10-26T12:34:48Z","teams_url":"https://api.github.com/repos/mralexgray/ace/teams","trees_url":"https://api.github.com/repos/mralexgray/ace/git/trees{/sha}","created_at":"2013-09-26T11:58:10Z","events_url":"https://api.github.com/repos/mralexgray/ace/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ace/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ace/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ace/merges","mirror_url":null,"updated_at":"2013-10-26T12:34:49Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ace/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ace/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ace/compare/{base}...{head}","description":"Ace (Ajax.org Cloud9 Editor)","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ace/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ace/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ace/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ace/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ace/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ace/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ace/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ace/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ace/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ace/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ace/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ace/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ace/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ace/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ace/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ace/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ace/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ace/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ace/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ace/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ace/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10791045,"url":"https://api.github.com/repos/mralexgray/ACEView","fork":true,"name":"ACEView","size":1733,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ACEView.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDc5MTA0NQ==","private":false,"ssh_url":"git@github.com:mralexgray/ACEView.git","svn_url":"https://github.com/mralexgray/ACEView","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/ACEView","keys_url":"https://api.github.com/repos/mralexgray/ACEView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ACEView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ACEView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ACEView.git","forks_url":"https://api.github.com/repos/mralexgray/ACEView/forks","full_name":"mralexgray/ACEView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ACEView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ACEView/pulls{/number}","pushed_at":"2014-05-09T01:36:23Z","teams_url":"https://api.github.com/repos/mralexgray/ACEView/teams","trees_url":"https://api.github.com/repos/mralexgray/ACEView/git/trees{/sha}","created_at":"2013-06-19T12:15:04Z","events_url":"https://api.github.com/repos/mralexgray/ACEView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ACEView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ACEView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ACEView/merges","mirror_url":null,"updated_at":"2015-11-24T01:14:10Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ACEView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ACEView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ACEView/compare/{base}...{head}","description":"Use the wonderful ACE editor in your Cocoa applications","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ACEView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ACEView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ACEView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ACEView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ACEView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ACEView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ACEView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ACEView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ACEView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ACEView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ACEView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ACEView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ACEView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ACEView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ACEView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ACEView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ACEView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ACEView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ACEView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ACEView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ACEView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13623648,"url":"https://api.github.com/repos/mralexgray/ActiveLog","fork":true,"name":"ActiveLog","size":60,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ActiveLog.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYyMzY0OA==","private":false,"ssh_url":"git@github.com:mralexgray/ActiveLog.git","svn_url":"https://github.com/mralexgray/ActiveLog","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://deepitpro.com/en/articles/ActiveLog/info/","html_url":"https://github.com/mralexgray/ActiveLog","keys_url":"https://api.github.com/repos/mralexgray/ActiveLog/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ActiveLog/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ActiveLog.git","forks_url":"https://api.github.com/repos/mralexgray/ActiveLog/forks","full_name":"mralexgray/ActiveLog","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ActiveLog/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ActiveLog/pulls{/number}","pushed_at":"2011-07-03T06:28:59Z","teams_url":"https://api.github.com/repos/mralexgray/ActiveLog/teams","trees_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/trees{/sha}","created_at":"2013-10-16T15:52:37Z","events_url":"https://api.github.com/repos/mralexgray/ActiveLog/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ActiveLog/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ActiveLog/merges","mirror_url":null,"updated_at":"2013-10-16T15:52:37Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ActiveLog/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ActiveLog/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ActiveLog/compare/{base}...{head}","description":"Shut up all logs with active filter.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ActiveLog/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ActiveLog/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ActiveLog/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ActiveLog/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ActiveLog/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ActiveLog/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ActiveLog/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ActiveLog/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ActiveLog/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ActiveLog/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ActiveLog/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ActiveLog/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ActiveLog/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ActiveLog/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ActiveLog/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ActiveLog/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ActiveLog/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ActiveLog/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9716210,"url":"https://api.github.com/repos/mralexgray/adium","fork":false,"name":"adium","size":277719,"forks":37,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/adium.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnk5NzE2MjEw","private":false,"ssh_url":"git@github.com:mralexgray/adium.git","svn_url":"https://github.com/mralexgray/adium","archived":false,"disabled":false,"has_wiki":false,"homepage":null,"html_url":"https://github.com/mralexgray/adium","keys_url":"https://api.github.com/repos/mralexgray/adium/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/adium/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/adium/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/adium.git","forks_url":"https://api.github.com/repos/mralexgray/adium/forks","full_name":"mralexgray/adium","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/adium/hooks","pulls_url":"https://api.github.com/repos/mralexgray/adium/pulls{/number}","pushed_at":"2013-04-26T16:43:53Z","teams_url":"https://api.github.com/repos/mralexgray/adium/teams","trees_url":"https://api.github.com/repos/mralexgray/adium/git/trees{/sha}","created_at":"2013-04-27T14:59:33Z","events_url":"https://api.github.com/repos/mralexgray/adium/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/adium/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/adium/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/adium/merges","mirror_url":null,"updated_at":"2019-12-11T06:51:45Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/adium/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/adium/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/adium/compare/{base}...{head}","description":"Official mirror of hg.adium.im","forks_count":37,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/adium/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/adium/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/adium/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/adium/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/adium/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/adium/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/adium/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/adium/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/adium/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/adium/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/adium/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/adium/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/adium/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/adium/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/adium/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/adium/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/adium/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/adium/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/adium/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/adium/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/adium/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12752329,"url":"https://api.github.com/repos/mralexgray/ADLivelyTableView","fork":true,"name":"ADLivelyTableView","size":73,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ADLivelyTableView.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1MjMyOQ==","private":false,"ssh_url":"git@github.com:mralexgray/ADLivelyTableView.git","svn_url":"https://github.com/mralexgray/ADLivelyTableView","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://applidium.com/en/news/lively_uitableview/","html_url":"https://github.com/mralexgray/ADLivelyTableView","keys_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ADLivelyTableView.git","forks_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/forks","full_name":"mralexgray/ADLivelyTableView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/pulls{/number}","pushed_at":"2012-05-10T10:40:15Z","teams_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/teams","trees_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/trees{/sha}","created_at":"2013-09-11T09:18:01Z","events_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/merges","mirror_url":null,"updated_at":"2013-09-11T09:18:03Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/compare/{base}...{head}","description":"Lively UITableView","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ADLivelyTableView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5697379,"url":"https://api.github.com/repos/mralexgray/AFIncrementalStore","fork":true,"name":"AFIncrementalStore","size":139,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AFIncrementalStore.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnk1Njk3Mzc5","private":false,"ssh_url":"git@github.com:mralexgray/AFIncrementalStore.git","svn_url":"https://github.com/mralexgray/AFIncrementalStore","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AFIncrementalStore","keys_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AFIncrementalStore.git","forks_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/forks","full_name":"mralexgray/AFIncrementalStore","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/pulls{/number}","pushed_at":"2012-09-01T22:46:25Z","teams_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/teams","trees_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/trees{/sha}","created_at":"2012-09-06T04:20:33Z","events_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/merges","mirror_url":null,"updated_at":"2013-01-12T03:15:29Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/compare/{base}...{head}","description":"Core Data Persistence with AFNetworking, Done Right","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AFIncrementalStore/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":6969621,"url":"https://api.github.com/repos/mralexgray/AFNetworking","fork":true,"name":"AFNetworking","size":4341,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AFNetworking.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnk2OTY5NjIx","private":false,"ssh_url":"git@github.com:mralexgray/AFNetworking.git","svn_url":"https://github.com/mralexgray/AFNetworking","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://afnetworking.com","html_url":"https://github.com/mralexgray/AFNetworking","keys_url":"https://api.github.com/repos/mralexgray/AFNetworking/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AFNetworking/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AFNetworking.git","forks_url":"https://api.github.com/repos/mralexgray/AFNetworking/forks","full_name":"mralexgray/AFNetworking","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AFNetworking/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AFNetworking/pulls{/number}","pushed_at":"2014-01-24T07:14:32Z","teams_url":"https://api.github.com/repos/mralexgray/AFNetworking/teams","trees_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/trees{/sha}","created_at":"2012-12-02T17:00:04Z","events_url":"https://api.github.com/repos/mralexgray/AFNetworking/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AFNetworking/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AFNetworking/merges","mirror_url":null,"updated_at":"2014-01-24T07:14:33Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AFNetworking/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AFNetworking/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AFNetworking/compare/{base}...{head}","description":"A delightful iOS and OS X networking framework","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AFNetworking/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AFNetworking/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AFNetworking/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AFNetworking/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AFNetworking/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AFNetworking/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AFNetworking/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AFNetworking/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AFNetworking/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AFNetworking/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/AFNetworking/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AFNetworking/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AFNetworking/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AFNetworking/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/AFNetworking/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AFNetworking/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AFNetworking/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AFNetworking/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9485541,"url":"https://api.github.com/repos/mralexgray/AGNSSplitView","fork":true,"name":"AGNSSplitView","size":68,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AGNSSplitView.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5NDg1NTQx","private":false,"ssh_url":"git@github.com:mralexgray/AGNSSplitView.git","svn_url":"https://github.com/mralexgray/AGNSSplitView","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AGNSSplitView","keys_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AGNSSplitView.git","forks_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/forks","full_name":"mralexgray/AGNSSplitView","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/pulls{/number}","pushed_at":"2013-02-26T00:32:32Z","teams_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/teams","trees_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/trees{/sha}","created_at":"2013-04-17T00:10:13Z","events_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/merges","mirror_url":null,"updated_at":"2013-04-17T00:10:13Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/compare/{base}...{head}","description":"Simple NSSplitView additions.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AGNSSplitView/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12767784,"url":"https://api.github.com/repos/mralexgray/AGScopeBar","fork":true,"name":"AGScopeBar","size":64,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AGScopeBar.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc2Nzc4NA==","private":false,"ssh_url":"git@github.com:mralexgray/AGScopeBar.git","svn_url":"https://github.com/mralexgray/AGScopeBar","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AGScopeBar","keys_url":"https://api.github.com/repos/mralexgray/AGScopeBar/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AGScopeBar/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AGScopeBar.git","forks_url":"https://api.github.com/repos/mralexgray/AGScopeBar/forks","full_name":"mralexgray/AGScopeBar","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AGScopeBar/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AGScopeBar/pulls{/number}","pushed_at":"2013-05-07T03:35:29Z","teams_url":"https://api.github.com/repos/mralexgray/AGScopeBar/teams","trees_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/trees{/sha}","created_at":"2013-09-11T21:06:54Z","events_url":"https://api.github.com/repos/mralexgray/AGScopeBar/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AGScopeBar/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AGScopeBar/merges","mirror_url":null,"updated_at":"2013-09-11T21:06:54Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AGScopeBar/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AGScopeBar/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AGScopeBar/compare/{base}...{head}","description":"Custom scope bar implementation for Cocoa","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AGScopeBar/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AGScopeBar/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AGScopeBar/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AGScopeBar/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AGScopeBar/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AGScopeBar/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AGScopeBar/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AGScopeBar/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AGScopeBar/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AGScopeBar/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AGScopeBar/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AGScopeBar/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AGScopeBar/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AGScopeBar/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AGScopeBar/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AGScopeBar/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AGScopeBar/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AGScopeBar/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":31829499,"url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin","fork":true,"name":"agvtool-xcode-plugin","size":102,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/agvtool-xcode-plugin.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkzMTgyOTQ5OQ==","private":false,"ssh_url":"git@github.com:mralexgray/agvtool-xcode-plugin.git","svn_url":"https://github.com/mralexgray/agvtool-xcode-plugin","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/agvtool-xcode-plugin","keys_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/agvtool-xcode-plugin.git","forks_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/forks","full_name":"mralexgray/agvtool-xcode-plugin","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/hooks","pulls_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/pulls{/number}","pushed_at":"2015-03-08T00:04:31Z","teams_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/teams","trees_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/trees{/sha}","created_at":"2015-03-07T22:15:38Z","events_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/merges","mirror_url":null,"updated_at":"2015-03-07T22:15:41Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/compare/{base}...{head}","description":"this is a plugin wrapper for agvtool for xcode.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/agvtool-xcode-plugin/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9227846,"url":"https://api.github.com/repos/mralexgray/AHContentBrowser","fork":true,"name":"AHContentBrowser","size":223,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHContentBrowser.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5MjI3ODQ2","private":false,"ssh_url":"git@github.com:mralexgray/AHContentBrowser.git","svn_url":"https://github.com/mralexgray/AHContentBrowser","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AHContentBrowser","keys_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHContentBrowser.git","forks_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/forks","full_name":"mralexgray/AHContentBrowser","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/pulls{/number}","pushed_at":"2013-03-13T17:38:23Z","teams_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/teams","trees_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/trees{/sha}","created_at":"2013-04-04T20:56:16Z","events_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/merges","mirror_url":null,"updated_at":"2015-10-22T05:00:24Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/compare/{base}...{head}","description":"A Mac only webview that loads a fast readable version of the website if available.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHContentBrowser/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":37430328,"url":"https://api.github.com/repos/mralexgray/AHLaunchCtl","fork":true,"name":"AHLaunchCtl","size":592,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHLaunchCtl.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkzNzQzMDMyOA==","private":false,"ssh_url":"git@github.com:mralexgray/AHLaunchCtl.git","svn_url":"https://github.com/mralexgray/AHLaunchCtl","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AHLaunchCtl","keys_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHLaunchCtl.git","forks_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/forks","full_name":"mralexgray/AHLaunchCtl","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/pulls{/number}","pushed_at":"2015-05-26T18:50:48Z","teams_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/teams","trees_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/trees{/sha}","created_at":"2015-06-14T21:31:03Z","events_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/merges","mirror_url":null,"updated_at":"2015-06-14T21:31:04Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/compare/{base}...{head}","description":"LaunchD Framework for Cocoa Apps","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHLaunchCtl/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":9167473,"url":"https://api.github.com/repos/mralexgray/AHLayout","fork":true,"name":"AHLayout","size":359,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AHLayout.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk5MTY3NDcz","private":false,"ssh_url":"git@github.com:mralexgray/AHLayout.git","svn_url":"https://github.com/mralexgray/AHLayout","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/AHLayout","keys_url":"https://api.github.com/repos/mralexgray/AHLayout/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AHLayout/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AHLayout/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AHLayout.git","forks_url":"https://api.github.com/repos/mralexgray/AHLayout/forks","full_name":"mralexgray/AHLayout","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AHLayout/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AHLayout/pulls{/number}","pushed_at":"2013-07-08T02:31:14Z","teams_url":"https://api.github.com/repos/mralexgray/AHLayout/teams","trees_url":"https://api.github.com/repos/mralexgray/AHLayout/git/trees{/sha}","created_at":"2013-04-02T10:10:30Z","events_url":"https://api.github.com/repos/mralexgray/AHLayout/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AHLayout/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AHLayout/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AHLayout/merges","mirror_url":null,"updated_at":"2013-07-08T02:31:17Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AHLayout/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AHLayout/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AHLayout/compare/{base}...{head}","description":"AHLayout","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AHLayout/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AHLayout/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AHLayout/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AHLayout/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AHLayout/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AHLayout/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AHLayout/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AHLayout/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AHLayout/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AHLayout/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AHLayout/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AHLayout/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AHLayout/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AHLayout/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AHLayout/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AHLayout/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AHLayout/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AHLayout/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AHLayout/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AHLayout/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AHLayout/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":18450201,"url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework","fork":true,"name":"Airmail-Plug-In-Framework","size":888,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Airmail-Plug-In-Framework.git","license":{"key":"gpl-2.0","url":"https://api.github.com/licenses/gpl-2.0","name":"GNU General Public License v2.0","node_id":"MDc6TGljZW5zZTg=","spdx_id":"GPL-2.0"},"node_id":"MDEwOlJlcG9zaXRvcnkxODQ1MDIwMQ==","private":false,"ssh_url":"git@github.com:mralexgray/Airmail-Plug-In-Framework.git","svn_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework","keys_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Airmail-Plug-In-Framework.git","forks_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/forks","full_name":"mralexgray/Airmail-Plug-In-Framework","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/pulls{/number}","pushed_at":"2014-03-27T15:42:19Z","teams_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/teams","trees_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/trees{/sha}","created_at":"2014-04-04T19:33:54Z","events_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/merges","mirror_url":null,"updated_at":"2014-11-23T19:31:04Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/compare/{base}...{head}","description":null,"forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Airmail-Plug-In-Framework/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5203219,"url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API","fork":true,"name":"AJS-iTunes-API","size":103,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AJS-iTunes-API.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1MjAzMjE5","private":false,"ssh_url":"git@github.com:mralexgray/AJS-iTunes-API.git","svn_url":"https://github.com/mralexgray/AJS-iTunes-API","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/AJS-iTunes-API","keys_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AJS-iTunes-API.git","forks_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/forks","full_name":"mralexgray/AJS-iTunes-API","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/pulls{/number}","pushed_at":"2011-10-30T22:26:48Z","teams_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/teams","trees_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/trees{/sha}","created_at":"2012-07-27T10:20:58Z","events_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/merges","mirror_url":null,"updated_at":"2013-01-11T11:00:05Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/compare/{base}...{head}","description":"Cocoa wrapper for the iTunes search API - for iOS and Mac OSX projects","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AJS-iTunes-API/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10093801,"url":"https://api.github.com/repos/mralexgray/Alcatraz","fork":true,"name":"Alcatraz","size":3668,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Alcatraz.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDA5MzgwMQ==","private":false,"ssh_url":"git@github.com:mralexgray/Alcatraz.git","svn_url":"https://github.com/mralexgray/Alcatraz","archived":false,"disabled":false,"has_wiki":false,"homepage":"mneorr.github.com/Alcatraz","html_url":"https://github.com/mralexgray/Alcatraz","keys_url":"https://api.github.com/repos/mralexgray/Alcatraz/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Alcatraz/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Alcatraz.git","forks_url":"https://api.github.com/repos/mralexgray/Alcatraz/forks","full_name":"mralexgray/Alcatraz","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Alcatraz/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Alcatraz/pulls{/number}","pushed_at":"2014-03-19T12:50:37Z","teams_url":"https://api.github.com/repos/mralexgray/Alcatraz/teams","trees_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/trees{/sha}","created_at":"2013-05-16T04:41:13Z","events_url":"https://api.github.com/repos/mralexgray/Alcatraz/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Alcatraz/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Alcatraz/merges","mirror_url":null,"updated_at":"2014-03-19T20:38:35Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Alcatraz/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Alcatraz/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Alcatraz/compare/{base}...{head}","description":"The most awesome (and only) Xcode package manager!","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Alcatraz/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Alcatraz/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Alcatraz/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Alcatraz/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Alcatraz/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Alcatraz/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Alcatraz/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Alcatraz/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Alcatraz/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Alcatraz/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Alcatraz/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Alcatraz/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Alcatraz/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Alcatraz/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Alcatraz/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Alcatraz/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Alcatraz/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Alcatraz/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":12916552,"url":"https://api.github.com/repos/mralexgray/alcatraz-packages","fork":true,"name":"alcatraz-packages","size":826,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/alcatraz-packages.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMjkxNjU1Mg==","private":false,"ssh_url":"git@github.com:mralexgray/alcatraz-packages.git","svn_url":"https://github.com/mralexgray/alcatraz-packages","archived":false,"disabled":false,"has_wiki":true,"homepage":"mneorr.github.com/Alcatraz","html_url":"https://github.com/mralexgray/alcatraz-packages","keys_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/keys{/key_id}","language":"Ruby","tags_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/alcatraz-packages.git","forks_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/forks","full_name":"mralexgray/alcatraz-packages","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/hooks","pulls_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/pulls{/number}","pushed_at":"2015-12-14T16:21:31Z","teams_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/teams","trees_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/trees{/sha}","created_at":"2013-09-18T07:15:24Z","events_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/merges","mirror_url":null,"updated_at":"2015-11-10T20:52:30Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/compare/{base}...{head}","description":"Package list repository for Alcatraz","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/alcatraz-packages/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":44278362,"url":"https://api.github.com/repos/mralexgray/alexicons","fork":true,"name":"alexicons","size":257,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/alexicons.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk0NDI3ODM2Mg==","private":false,"ssh_url":"git@github.com:mralexgray/alexicons.git","svn_url":"https://github.com/mralexgray/alexicons","archived":false,"disabled":false,"has_wiki":false,"homepage":null,"html_url":"https://github.com/mralexgray/alexicons","keys_url":"https://api.github.com/repos/mralexgray/alexicons/keys{/key_id}","language":"CoffeeScript","tags_url":"https://api.github.com/repos/mralexgray/alexicons/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/alexicons/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/alexicons.git","forks_url":"https://api.github.com/repos/mralexgray/alexicons/forks","full_name":"mralexgray/alexicons","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/alexicons/hooks","pulls_url":"https://api.github.com/repos/mralexgray/alexicons/pulls{/number}","pushed_at":"2015-10-16T03:57:51Z","teams_url":"https://api.github.com/repos/mralexgray/alexicons/teams","trees_url":"https://api.github.com/repos/mralexgray/alexicons/git/trees{/sha}","created_at":"2015-10-14T21:49:39Z","events_url":"https://api.github.com/repos/mralexgray/alexicons/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/alexicons/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/alexicons/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/alexicons/merges","mirror_url":null,"updated_at":"2015-10-15T06:20:08Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/alexicons/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/alexicons/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/alexicons/compare/{base}...{head}","description":"Get popular cat names","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/alexicons/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/alexicons/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/alexicons/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/alexicons/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/alexicons/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/alexicons/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/alexicons/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/alexicons/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/alexicons/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/alexicons/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/alexicons/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/alexicons/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/alexicons/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/alexicons/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/alexicons/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/alexicons/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/alexicons/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/alexicons/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/alexicons/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/alexicons/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/alexicons/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10476467,"url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate","fork":true,"name":"Alfred-Google-Translate","size":103,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Alfred-Google-Translate.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ3NjQ2Nw==","private":false,"ssh_url":"git@github.com:mralexgray/Alfred-Google-Translate.git","svn_url":"https://github.com/mralexgray/Alfred-Google-Translate","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Alfred-Google-Translate","keys_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/keys{/key_id}","language":"Shell","tags_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Alfred-Google-Translate.git","forks_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/forks","full_name":"mralexgray/Alfred-Google-Translate","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/pulls{/number}","pushed_at":"2013-01-12T19:39:03Z","teams_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/teams","trees_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/trees{/sha}","created_at":"2013-06-04T10:45:10Z","events_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/merges","mirror_url":null,"updated_at":"2013-06-04T10:45:10Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/compare/{base}...{head}","description":"Extension for Alfred that will do a Google translate for you","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Alfred-Google-Translate/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5524019,"url":"https://api.github.com/repos/mralexgray/Amber","fork":false,"name":"Amber","size":48,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Amber.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1NTI0MDE5","private":false,"ssh_url":"git@github.com:mralexgray/Amber.git","svn_url":"https://github.com/mralexgray/Amber","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Amber","keys_url":"https://api.github.com/repos/mralexgray/Amber/keys{/key_id}","language":null,"tags_url":"https://api.github.com/repos/mralexgray/Amber/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Amber/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Amber.git","forks_url":"https://api.github.com/repos/mralexgray/Amber/forks","full_name":"mralexgray/Amber","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Amber/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Amber/pulls{/number}","pushed_at":"2012-08-23T10:38:25Z","teams_url":"https://api.github.com/repos/mralexgray/Amber/teams","trees_url":"https://api.github.com/repos/mralexgray/Amber/git/trees{/sha}","created_at":"2012-08-23T10:38:24Z","events_url":"https://api.github.com/repos/mralexgray/Amber/events","has_issues":true,"issues_url":"https://api.github.com/repos/mralexgray/Amber/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Amber/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Amber/merges","mirror_url":null,"updated_at":"2013-01-11T22:25:35Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Amber/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Amber/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Amber/compare/{base}...{head}","description":"Fork of the difficult-to-deal-with Amber.framework","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Amber/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Amber/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Amber/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Amber/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Amber/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Amber/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Amber/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Amber/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Amber/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Amber/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Amber/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Amber/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Amber/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Amber/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Amber/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Amber/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Amber/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Amber/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Amber/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Amber/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Amber/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":10809060,"url":"https://api.github.com/repos/mralexgray/Amethyst","fork":true,"name":"Amethyst","size":12623,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Amethyst.git","license":{"key":"mit","url":"https://api.github.com/licenses/mit","name":"MIT License","node_id":"MDc6TGljZW5zZTEz","spdx_id":"MIT"},"node_id":"MDEwOlJlcG9zaXRvcnkxMDgwOTA2MA==","private":false,"ssh_url":"git@github.com:mralexgray/Amethyst.git","svn_url":"https://github.com/mralexgray/Amethyst","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://ianyh.github.io/Amethyst/","html_url":"https://github.com/mralexgray/Amethyst","keys_url":"https://api.github.com/repos/mralexgray/Amethyst/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Amethyst/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Amethyst/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Amethyst.git","forks_url":"https://api.github.com/repos/mralexgray/Amethyst/forks","full_name":"mralexgray/Amethyst","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Amethyst/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Amethyst/pulls{/number}","pushed_at":"2013-06-18T02:54:11Z","teams_url":"https://api.github.com/repos/mralexgray/Amethyst/teams","trees_url":"https://api.github.com/repos/mralexgray/Amethyst/git/trees{/sha}","created_at":"2013-06-20T00:34:22Z","events_url":"https://api.github.com/repos/mralexgray/Amethyst/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Amethyst/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Amethyst/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Amethyst/merges","mirror_url":null,"updated_at":"2013-06-20T00:34:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Amethyst/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Amethyst/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Amethyst/compare/{base}...{head}","description":"Tiling window manager for OS X.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Amethyst/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Amethyst/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Amethyst/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Amethyst/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Amethyst/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Amethyst/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Amethyst/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Amethyst/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Amethyst/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Amethyst/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Amethyst/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Amethyst/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Amethyst/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Amethyst/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Amethyst/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Amethyst/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Amethyst/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Amethyst/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Amethyst/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Amethyst/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Amethyst/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":3684286,"url":"https://api.github.com/repos/mralexgray/Animated-Paths","fork":true,"name":"Animated-Paths","size":411,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Animated-Paths.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkzNjg0Mjg2","private":false,"ssh_url":"git@github.com:mralexgray/Animated-Paths.git","svn_url":"https://github.com/mralexgray/Animated-Paths","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/","html_url":"https://github.com/mralexgray/Animated-Paths","keys_url":"https://api.github.com/repos/mralexgray/Animated-Paths/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/Animated-Paths/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Animated-Paths.git","forks_url":"https://api.github.com/repos/mralexgray/Animated-Paths/forks","full_name":"mralexgray/Animated-Paths","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Animated-Paths/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Animated-Paths/pulls{/number}","pushed_at":"2010-12-30T20:56:51Z","teams_url":"https://api.github.com/repos/mralexgray/Animated-Paths/teams","trees_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/trees{/sha}","created_at":"2012-03-11T02:56:38Z","events_url":"https://api.github.com/repos/mralexgray/Animated-Paths/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Animated-Paths/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Animated-Paths/merges","mirror_url":null,"updated_at":"2013-01-08T04:12:21Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Animated-Paths/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Animated-Paths/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Animated-Paths/compare/{base}...{head}","description":"Demo project: Animating the drawing of a CGPath with CAShapeLayer.strokeEnd","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Animated-Paths/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Animated-Paths/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Animated-Paths/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Animated-Paths/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Animated-Paths/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Animated-Paths/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Animated-Paths/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Animated-Paths/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Animated-Paths/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Animated-Paths/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/Animated-Paths/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Animated-Paths/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Animated-Paths/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Animated-Paths/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/Animated-Paths/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Animated-Paths/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Animated-Paths/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Animated-Paths/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":16662874,"url":"https://api.github.com/repos/mralexgray/AnsiLove.framework","fork":true,"name":"AnsiLove.framework","size":3780,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AnsiLove.framework.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkxNjY2Mjg3NA==","private":false,"ssh_url":"git@github.com:mralexgray/AnsiLove.framework.git","svn_url":"https://github.com/mralexgray/AnsiLove.framework","archived":false,"disabled":false,"has_wiki":false,"homepage":"http://byteproject.net","html_url":"https://github.com/mralexgray/AnsiLove.framework","keys_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/keys{/key_id}","language":"M","tags_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AnsiLove.framework.git","forks_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/forks","full_name":"mralexgray/AnsiLove.framework","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/pulls{/number}","pushed_at":"2013-10-04T14:08:38Z","teams_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/teams","trees_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/trees{/sha}","created_at":"2014-02-09T08:30:27Z","events_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/merges","mirror_url":null,"updated_at":"2015-01-13T20:41:46Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/compare/{base}...{head}","description":"Cocoa Framework for rendering ANSi / ASCII art","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AnsiLove.framework/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":5189563,"url":"https://api.github.com/repos/mralexgray/ANTrackBar","fork":true,"name":"ANTrackBar","size":94,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/ANTrackBar.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnk1MTg5NTYz","private":false,"ssh_url":"git@github.com:mralexgray/ANTrackBar.git","svn_url":"https://github.com/mralexgray/ANTrackBar","archived":false,"disabled":false,"has_wiki":true,"homepage":"","html_url":"https://github.com/mralexgray/ANTrackBar","keys_url":"https://api.github.com/repos/mralexgray/ANTrackBar/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/ANTrackBar/tags","watchers":2,"blobs_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/ANTrackBar.git","forks_url":"https://api.github.com/repos/mralexgray/ANTrackBar/forks","full_name":"mralexgray/ANTrackBar","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/ANTrackBar/hooks","pulls_url":"https://api.github.com/repos/mralexgray/ANTrackBar/pulls{/number}","pushed_at":"2012-03-09T01:40:02Z","teams_url":"https://api.github.com/repos/mralexgray/ANTrackBar/teams","trees_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/trees{/sha}","created_at":"2012-07-26T08:17:22Z","events_url":"https://api.github.com/repos/mralexgray/ANTrackBar/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/ANTrackBar/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/ANTrackBar/merges","mirror_url":null,"updated_at":"2013-01-11T10:29:56Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/ANTrackBar/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/ANTrackBar/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/ANTrackBar/compare/{base}...{head}","description":"An easy-to-use Cocoa seek bar with a pleasing appearance","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/ANTrackBar/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/ANTrackBar/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/ANTrackBar/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/ANTrackBar/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/ANTrackBar/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/ANTrackBar/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/ANTrackBar/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/ANTrackBar/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/ANTrackBar/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/ANTrackBar/stargazers","watchers_count":2,"deployments_url":"https://api.github.com/repos/mralexgray/ANTrackBar/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/ANTrackBar/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/ANTrackBar/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/ANTrackBar/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues/events{/number}","stargazers_count":2,"subscription_url":"https://api.github.com/repos/mralexgray/ANTrackBar/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/ANTrackBar/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/ANTrackBar/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/ANTrackBar/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":16240152,"url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C","fork":true,"name":"AOP-in-Objective-C","size":340,"forks":1,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/AOP-in-Objective-C.git","license":null,"node_id":"MDEwOlJlcG9zaXRvcnkxNjI0MDE1Mg==","private":false,"ssh_url":"git@github.com:mralexgray/AOP-in-Objective-C.git","svn_url":"https://github.com/mralexgray/AOP-in-Objective-C","archived":false,"disabled":false,"has_wiki":true,"homepage":"http://innoli.hu/en/opensource/","html_url":"https://github.com/mralexgray/AOP-in-Objective-C","keys_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/keys{/key_id}","language":"Objective-C","tags_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/AOP-in-Objective-C.git","forks_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/forks","full_name":"mralexgray/AOP-in-Objective-C","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/hooks","pulls_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/pulls{/number}","pushed_at":"2014-02-12T16:23:20Z","teams_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/teams","trees_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/trees{/sha}","created_at":"2014-01-25T21:18:04Z","events_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/merges","mirror_url":null,"updated_at":"2014-06-19T19:38:12Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/compare/{base}...{head}","description":"An NSProxy based library for easily enabling AOP like functionality in Objective-C.","forks_count":1,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/languages","default_branch":"travis-coveralls","milestones_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/AOP-in-Objective-C/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":13141936,"url":"https://api.github.com/repos/mralexgray/Apaxy","fork":true,"name":"Apaxy","size":113,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/Apaxy.git","license":{"key":"unlicense","url":"https://api.github.com/licenses/unlicense","name":"The Unlicense","node_id":"MDc6TGljZW5zZTE1","spdx_id":"Unlicense"},"node_id":"MDEwOlJlcG9zaXRvcnkxMzE0MTkzNg==","private":false,"ssh_url":"git@github.com:mralexgray/Apaxy.git","svn_url":"https://github.com/mralexgray/Apaxy","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/Apaxy","keys_url":"https://api.github.com/repos/mralexgray/Apaxy/keys{/key_id}","language":"CSS","tags_url":"https://api.github.com/repos/mralexgray/Apaxy/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/Apaxy/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/Apaxy.git","forks_url":"https://api.github.com/repos/mralexgray/Apaxy/forks","full_name":"mralexgray/Apaxy","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/Apaxy/hooks","pulls_url":"https://api.github.com/repos/mralexgray/Apaxy/pulls{/number}","pushed_at":"2013-08-02T16:01:32Z","teams_url":"https://api.github.com/repos/mralexgray/Apaxy/teams","trees_url":"https://api.github.com/repos/mralexgray/Apaxy/git/trees{/sha}","created_at":"2013-09-27T05:05:35Z","events_url":"https://api.github.com/repos/mralexgray/Apaxy/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/Apaxy/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/Apaxy/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/Apaxy/merges","mirror_url":null,"updated_at":"2018-02-16T21:40:24Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/Apaxy/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/Apaxy/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/Apaxy/compare/{base}...{head}","description":"A simple, customisable theme for your Apache directory listing.","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/Apaxy/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/Apaxy/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/Apaxy/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/Apaxy/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/Apaxy/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/Apaxy/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/Apaxy/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/Apaxy/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/Apaxy/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/Apaxy/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/Apaxy/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/Apaxy/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/Apaxy/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/Apaxy/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/Apaxy/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/Apaxy/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/Apaxy/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/Apaxy/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/Apaxy/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/Apaxy/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/Apaxy/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false},{"id":20027360,"url":"https://api.github.com/repos/mralexgray/app","fork":true,"name":"app","size":1890,"forks":0,"owner":{"id":262517,"url":"https://api.github.com/users/mralexgray","type":"User","login":"mralexgray","node_id":"MDQ6VXNlcjI2MjUxNw==","html_url":"https://github.com/mralexgray","gists_url":"https://api.github.com/users/mralexgray/gists{/gist_id}","repos_url":"https://api.github.com/users/mralexgray/repos","avatar_url":"https://avatars.githubusercontent.com/u/262517?v=4","events_url":"https://api.github.com/users/mralexgray/events{/privacy}","site_admin":false,"gravatar_id":"","starred_url":"https://api.github.com/users/mralexgray/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/mralexgray/followers","following_url":"https://api.github.com/users/mralexgray/following{/other_user}","organizations_url":"https://api.github.com/users/mralexgray/orgs","subscriptions_url":"https://api.github.com/users/mralexgray/subscriptions","received_events_url":"https://api.github.com/users/mralexgray/received_events"},"topics":[],"git_url":"git://github.com/mralexgray/app.git","license":{"key":"other","url":null,"name":"Other","node_id":"MDc6TGljZW5zZTA=","spdx_id":"NOASSERTION"},"node_id":"MDEwOlJlcG9zaXRvcnkyMDAyNzM2MA==","private":false,"ssh_url":"git@github.com:mralexgray/app.git","svn_url":"https://github.com/mralexgray/app","archived":false,"disabled":false,"has_wiki":true,"homepage":null,"html_url":"https://github.com/mralexgray/app","keys_url":"https://api.github.com/repos/mralexgray/app/keys{/key_id}","language":"JavaScript","tags_url":"https://api.github.com/repos/mralexgray/app/tags","watchers":0,"blobs_url":"https://api.github.com/repos/mralexgray/app/git/blobs{/sha}","clone_url":"https://github.com/mralexgray/app.git","forks_url":"https://api.github.com/repos/mralexgray/app/forks","full_name":"mralexgray/app","has_pages":false,"hooks_url":"https://api.github.com/repos/mralexgray/app/hooks","pulls_url":"https://api.github.com/repos/mralexgray/app/pulls{/number}","pushed_at":"2014-05-20T19:51:38Z","teams_url":"https://api.github.com/repos/mralexgray/app/teams","trees_url":"https://api.github.com/repos/mralexgray/app/git/trees{/sha}","created_at":"2014-05-21T15:54:20Z","events_url":"https://api.github.com/repos/mralexgray/app/events","has_issues":false,"issues_url":"https://api.github.com/repos/mralexgray/app/issues{/number}","labels_url":"https://api.github.com/repos/mralexgray/app/labels{/name}","merges_url":"https://api.github.com/repos/mralexgray/app/merges","mirror_url":null,"updated_at":"2014-05-21T15:54:22Z","visibility":"public","archive_url":"https://api.github.com/repos/mralexgray/app/{archive_format}{/ref}","commits_url":"https://api.github.com/repos/mralexgray/app/commits{/sha}","compare_url":"https://api.github.com/repos/mralexgray/app/compare/{base}...{head}","description":"Instant mobile web app creation","forks_count":0,"is_template":false,"open_issues":0,"branches_url":"https://api.github.com/repos/mralexgray/app/branches{/branch}","comments_url":"https://api.github.com/repos/mralexgray/app/comments{/number}","contents_url":"https://api.github.com/repos/mralexgray/app/contents/{+path}","git_refs_url":"https://api.github.com/repos/mralexgray/app/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/mralexgray/app/git/tags{/sha}","has_projects":true,"releases_url":"https://api.github.com/repos/mralexgray/app/releases{/id}","statuses_url":"https://api.github.com/repos/mralexgray/app/statuses/{sha}","allow_forking":true,"assignees_url":"https://api.github.com/repos/mralexgray/app/assignees{/user}","downloads_url":"https://api.github.com/repos/mralexgray/app/downloads","has_downloads":true,"languages_url":"https://api.github.com/repos/mralexgray/app/languages","default_branch":"master","milestones_url":"https://api.github.com/repos/mralexgray/app/milestones{/number}","stargazers_url":"https://api.github.com/repos/mralexgray/app/stargazers","watchers_count":0,"deployments_url":"https://api.github.com/repos/mralexgray/app/deployments","git_commits_url":"https://api.github.com/repos/mralexgray/app/git/commits{/sha}","subscribers_url":"https://api.github.com/repos/mralexgray/app/subscribers","contributors_url":"https://api.github.com/repos/mralexgray/app/contributors","issue_events_url":"https://api.github.com/repos/mralexgray/app/issues/events{/number}","stargazers_count":0,"subscription_url":"https://api.github.com/repos/mralexgray/app/subscription","collaborators_url":"https://api.github.com/repos/mralexgray/app/collaborators{/collaborator}","issue_comment_url":"https://api.github.com/repos/mralexgray/app/issues/comments{/number}","notifications_url":"https://api.github.com/repos/mralexgray/app/notifications{?since,all,participating}","open_issues_count":0,"web_commit_signoff_required":false}],"name":"Shirt","revenue":4.99},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"},{"name":"Page View","type":"page","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"5f58d1f7-cbd6-4bff-8571-9933be7210b1","timestamp":"2020-02-02T00:23:09.544Z","properties":{"path":"/","title":"Home"},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', - destConfig: { - clientContext: '', - lambda: 'testFunction', - invocationType: 'Event', - }, + destConfig: { clientContext: '', lambda: 'testFunction', invocationType: 'Event' }, }, metadata: [ { @@ -25592,12 +25520,7 @@ export const data = [ event: 'Product Purchased new', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '9f8fb785-c720-4381-a009-bf22a13f4ced', timestamp: '2020-02-02T00:23:09.544Z', @@ -29859,19 +29782,11 @@ export const data = [ type: 'page', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '5f58d1f7-cbd6-4bff-8571-9933be7210b1', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - path: '/', - title: 'Home', - }, + properties: { path: '/', title: 'Home' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -29921,11 +29836,7 @@ export const data = [ batchedRequest: { payload: '[{"name":"Screen View","type":"screen","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"identified user id","context":{"ip":"14.5.67.21","library":{"name":"http"}},"rudderId":"daf823fb-e8d3-413a-8313-d34cd756f968","messageId":"1b8ee4c3-ffad-4457-b453-31b32da1dfea","timestamp":"2020-02-02T00:23:09.544Z","properties":{"prop1":"5"},"receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","anonymousId":"anon-id-new","originalTimestamp":"2022-08-18T08:43:15.539+05:30"},{"type":"group","sentAt":"2022-08-18T08:43:15.539+05:30","traits":{"name":"Company","industry":"Industry","employees":123},"userId":"user123","context":{"ip":"14.5.67.21","traits":{"trait1":"new-val"},"library":{"name":"http"}},"groupId":"group1","rudderId":"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5","messageId":"2c59b527-3235-4fc2-9680-f41ec52ebb51","timestamp":"2020-01-21T00:21:34.208Z","receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', - destConfig: { - clientContext: '', - lambda: 'testFunction', - invocationType: 'Event', - }, + destConfig: { clientContext: '', lambda: 'testFunction', invocationType: 'Event' }, }, metadata: [ { @@ -29953,18 +29864,11 @@ export const data = [ type: 'screen', sentAt: '2022-08-18T08:43:15.539+05:30', userId: 'identified user id', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: '1b8ee4c3-ffad-4457-b453-31b32da1dfea', timestamp: '2020-02-02T00:23:09.544Z', - properties: { - prop1: '5', - }, + properties: { prop1: '5' }, receivedAt: '2022-08-18T08:43:13.521+05:30', request_ip: '[::1]', anonymousId: 'anon-id-new', @@ -30029,20 +29933,12 @@ export const data = [ EventPayload: { type: 'group', sentAt: '2022-08-18T08:43:15.539+05:30', - traits: { - name: 'Company', - industry: 'Industry', - employees: 123, - }, + traits: { name: 'Company', industry: 'Industry', employees: 123 }, userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, groupId: 'group1', rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', @@ -30096,11 +29992,7 @@ export const data = [ batchedRequest: { payload: '[{"type":"alias","sentAt":"2022-08-18T08:43:15.539+05:30","userId":"user123","context":{"ip":"14.5.67.21","traits":{"trait1":"new-val"},"library":{"name":"http"}},"rudderId":"bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5","messageId":"3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d","timestamp":"2020-01-21T00:21:34.208Z","previousId":"previd1","receivedAt":"2022-08-18T08:43:13.521+05:30","request_ip":"[::1]","originalTimestamp":"2022-08-18T08:43:15.539+05:30"}]', - destConfig: { - clientContext: '', - lambda: 'testFunction', - invocationType: 'Event', - }, + destConfig: { clientContext: '', lambda: 'testFunction', invocationType: 'Event' }, }, metadata: [ { @@ -30129,12 +30021,8 @@ export const data = [ userId: 'user123', context: { ip: '14.5.67.21', - traits: { - trait1: 'new-val', - }, - library: { - name: 'http', - }, + traits: { trait1: 'new-val' }, + library: { name: 'http' }, }, rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', messageId: '3ff8d400-b6d4-43a4-a0ff-1bc7ae8b5f7d', @@ -38727,9 +38615,7 @@ export const data = [ ], trait1: 'new-val', }, - library: { - name: 'http', - }, + library: { name: 'http' }, }, rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', messageId: 'c864b4cd-8f07-4922-b3d0-82ef04c987d3', diff --git a/test/integrations/destinations/launchdarkly_audience/processor/data.ts b/test/integrations/destinations/launchdarkly_audience/processor/data.ts index b26cf60f4c..9f2370af7e 100644 --- a/test/integrations/destinations/launchdarkly_audience/processor/data.ts +++ b/test/integrations/destinations/launchdarkly_audience/processor/data.ts @@ -213,6 +213,74 @@ export const data = [ }, }, }, + { + name: 'launchdarkly_audience', + description: 'List data is empty', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'user123', + type: 'audiencelist', + properties: { + listData: {}, + }, + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + destination: { + Config: { + audienceId: 'test-audienceId', + audienceName: 'test-audienceName', + accessToken: 'test-accessToken', + clientSideId: 'test-clientSideId', + }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + statusCode: 400, + error: + '`listData` is empty. Aborting message.: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: `listData` is empty. Aborting message.', + statTags: { + destType: 'LAUNCHDARKLY_AUDIENCE', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + }, { name: 'launchdarkly_audience', description: 'Unsupported action type', diff --git a/test/integrations/destinations/leanplum/router/data.ts b/test/integrations/destinations/leanplum/router/data.ts index db75a7fdc4..29282c8b29 100644 --- a/test/integrations/destinations/leanplum/router/data.ts +++ b/test/integrations/destinations/leanplum/router/data.ts @@ -27,49 +27,25 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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', - }, + 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, - }, + integrations: { All: true }, messageId: 'id1', - properties: { - name: 'MainActivity', - automatic: true, - }, + properties: { name: 'MainActivity', automatic: true }, originalTimestamp: '2020-03-12T09:05:03.421Z', type: 'screen', sentAt: '2020-03-12T09:05:13.042Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { applicationId: 'leanplum_application_id', @@ -98,12 +74,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.leanplum.com/api', - headers: { - 'Content-Type': 'application/json', - }, - params: { - action: 'start', - }, + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, body: { JSON: { appId: 'leanplum_application_id', @@ -116,9 +88,7 @@ export const data = [ systemVersion: '8.1.0', deviceName: 'generic_x86', deviceModel: 'Android SDK built for x86', - userAttributes: { - anonymousId: '5094f5704b9cf2b3', - }, + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, locale: 'en-US', timezone: 'Asia/Kolkata', time: 1584003903, @@ -136,12 +106,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.leanplum.com/api', - headers: { - 'Content-Type': 'application/json', - }, - params: { - action: 'advance', - }, + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, body: { JSON: { appId: 'leanplum_application_id', @@ -161,11 +127,7 @@ export const data = [ userId: '5094f5704b9cf2b3', }, ], - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -211,49 +173,25 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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', - }, + 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, - }, + integrations: { All: true }, messageId: 'id2', - properties: { - name: 'MainActivity', - automatic: true, - }, + properties: { name: 'MainActivity', automatic: true }, originalTimestamp: '2020-03-12T09:05:03.421Z', type: 'screen', sentAt: '2020-03-12T09:05:13.042Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { applicationId: 'leanplum_application_id', @@ -282,12 +220,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.leanplum.com/api', - headers: { - 'Content-Type': 'application/json', - }, - params: { - action: 'start', - }, + headers: { 'Content-Type': 'application/json' }, + params: { action: 'start' }, body: { JSON: { appId: 'leanplum_application_id', @@ -300,9 +234,7 @@ export const data = [ systemVersion: '8.1.0', deviceName: 'generic_x86', deviceModel: 'Android SDK built for x86', - userAttributes: { - anonymousId: '5094f5704b9cf2b3', - }, + userAttributes: { anonymousId: '5094f5704b9cf2b3' }, locale: 'en-US', timezone: 'Asia/Kolkata', time: 1584003903, @@ -320,12 +252,8 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.leanplum.com/api', - headers: { - 'Content-Type': 'application/json', - }, - params: { - action: 'advance', - }, + headers: { 'Content-Type': 'application/json' }, + params: { action: 'advance' }, body: { JSON: { appId: 'leanplum_application_id', @@ -345,11 +273,7 @@ export const data = [ userId: '5094f5704b9cf2b3', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/lemnisk/router/data.ts b/test/integrations/destinations/lemnisk/router/data.ts index 1a1b84f180..2f6364a0b0 100644 --- a/test/integrations/destinations/lemnisk/router/data.ts +++ b/test/integrations/destinations/lemnisk/router/data.ts @@ -12,12 +12,7 @@ export const data = [ { message: { anonymousId: 'anon-id-new', - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, type: 'identify', }, destination: { @@ -87,9 +82,7 @@ export const data = [ rootStore: null, isProcessorEnabled: true, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { message: { @@ -102,10 +95,7 @@ export const data = [ event: 'Visited Home', messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-29T14:50:29.907+05:30', - traits: { - name: 'Home | RudderStack', - url: 'http://www.rudderstack.com', - }, + traits: { name: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, receivedAt: '2020-09-29T14:50:43.005+05:30', sentAt: '2020-09-28T19:53:44.998Z', timestamp: '2020-09-29T14:50:29.907+05:30', @@ -185,6 +175,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, { @@ -192,39 +183,20 @@ export const data = [ anonymousId: 'anon-id-new', channel: 'mobile', context: { - app: { - build: '4', - name: 'RuddCDN', - }, - page: { - referrer: 'google.com', - }, - device: { - id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', - name: 'generic_x86_arm', - }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.6', - }, - os: { - name: 'Android', - version: '9', - }, + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, timezone: 'Asia/Kolkata', - traits: { - customProp: 'customValue', - }, + traits: { customProp: 'customValue' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, event: 'Visited Home', messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-28T19:53:31.900Z', - properties: { - title: 'Home | RudderStack', - url: 'http://www.rudderstack.com', - }, + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, receivedAt: '2020-09-29T14:50:43.005+05:30', sentAt: '2020-09-28T19:53:44.998Z', timestamp: '2020-09-29T14:50:29.907+05:30', @@ -304,6 +276,7 @@ export const data = [ jobId: 129, messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, ], @@ -385,11 +358,7 @@ export const data = [ rootStore: null, isProcessorEnabled: true, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statTags: { destType: 'LEMNISK', feature: 'router', @@ -408,9 +377,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -512,6 +479,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], batched: false, @@ -523,45 +491,27 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'http://10.11.36.17:8080/analyze/analyze.php', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { type: 'track', context: { - app: { - build: '4', - name: 'RuddCDN', - }, - page: { - referrer: 'google.com', - }, + app: { build: '4', name: 'RuddCDN' }, + page: { referrer: 'google.com' }, device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.6', - }, - os: { - name: 'Android', - version: '9', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, timezone: 'Asia/Kolkata', - traits: { - customProp: 'customValue', - }, + traits: { customProp: 'customValue' }, userAgent: { ua: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, }, - properties: { - title: 'Home | RudderStack', - url: 'http://www.rudderstack.com', - }, + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, event: 'Visited Home', id: 'anon-id-new', userId: 'anon-id-new', @@ -651,6 +601,7 @@ export const data = [ jobId: 129, messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/lytics/router/data.ts b/test/integrations/destinations/lytics/router/data.ts index 98aded20bf..e5d9adae5c 100644 --- a/test/integrations/destinations/lytics/router/data.ts +++ b/test/integrations/destinations/lytics/router/data.ts @@ -20,15 +20,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.6', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.6', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/testing/script-test.html', referrer: '', @@ -36,13 +30,9 @@ export const data = [ title: '', url: 'http://localhost:3243/testing/script-test.html', }, - screen: { - density: 2, - }, + screen: { density: 2 }, traits: { - company: { - id: 'abc123', - }, + company: { id: 'abc123' }, createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', email: 'rudderTest@gmail.com', name: 'Rudder Test', @@ -52,9 +42,7 @@ export const data = [ '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', }, event: 'Order Completed', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', timestamp: '2020-10-16T08:10:12.782Z', properties: { @@ -123,14 +111,9 @@ export const data = [ type: 'track', userId: 'rudder123', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummyApiKey', - stream: 'default', - }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, Enabled: true, Transformations: [], IsProcessorEnabled: true, @@ -147,15 +130,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.6', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.6', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/testing/script-test.html', referrer: '', @@ -163,13 +140,9 @@ export const data = [ title: '', url: 'http://localhost:3243/testing/script-test.html', }, - screen: { - density: 2, - }, + screen: { density: 2 }, traits: { - company: { - id: 'abc123', - }, + company: { id: 'abc123' }, createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', email: 'rudderTest@gmail.com', name: 'Rudder Test', @@ -178,9 +151,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', originalTimestamp: '2020-10-16T08:26:14.938Z', receivedAt: '2020-10-16T13:56:14.945+05:30', @@ -190,14 +161,9 @@ export const data = [ type: 'identify', userId: 'rudder123', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: 'dummyApiKey', - stream: 'default', - }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, Enabled: true, Transformations: [], IsProcessorEnabled: true, @@ -220,9 +186,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -284,18 +248,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - stream: 'default', - }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, Enabled: true, Transformations: [], IsProcessorEnabled: true, @@ -307,9 +264,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.lytics.io/collect/json/default?access_token=dummyApiKey', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -326,18 +281,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'dummyApiKey', - stream: 'default', - }, + Config: { apiKey: 'dummyApiKey', stream: 'default' }, Enabled: true, Transformations: [], IsProcessorEnabled: true, diff --git a/test/integrations/destinations/mailchimp/router/data.ts b/test/integrations/destinations/mailchimp/router/data.ts index f6a9627719..93635e5369 100644 --- a/test/integrations/destinations/mailchimp/router/data.ts +++ b/test/integrations/destinations/mailchimp/router/data.ts @@ -27,9 +27,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', @@ -41,18 +39,10 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com', @@ -62,9 +52,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '21e475b2-3694-477b-afb6-5b94a81aac21', originalTimestamp: '2019-11-15T10:22:32Z', receivedAt: '2019-11-15T15:52:37+05:30', @@ -94,9 +82,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', @@ -108,30 +94,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'userId12345', - email: 'bob.dole@initech.com', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', }, - integrations: { - MailChimp: { - subscriptionStatus: 'subscribed', - }, - }, + integrations: { MailChimp: { subscriptionStatus: 'subscribed' } }, messageId: '6d1f3ca8-e2d0-4d34-9926-44596171af0c', originalTimestamp: '2019-11-15T10:26:53Z', receivedAt: '2019-11-15T15:56:58+05:30', @@ -161,9 +132,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', @@ -175,30 +144,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - anonymousId: 'userId12345', - email: 'bob.dole@initech.com', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com' }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', }, - integrations: { - MailChimp: { - subscriptionStatus: 'subscrib', - }, - }, + integrations: { MailChimp: { subscriptionStatus: 'subscrib' } }, messageId: '6d1f3ca8-e2d0-4d34-9926-44596171af0c', originalTimestamp: '2019-11-15T10:26:53Z', receivedAt: '2019-11-15T15:56:58+05:30', @@ -228,22 +182,12 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', - context: { - traits: { - anonymousId: 'userId12345', - email: 'bob.dole@initech.com', - }, - }, - properties: { - brand: 'Aster', - product: 'Garments', - }, + context: { traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com' } }, + properties: { brand: 'Aster', product: 'Garments' }, messageId: '6d1f3ca8-e2d0-4d34-9926-44596171af0c', originalTimestamp: '2019-11-15T10:26:53Z', receivedAt: '2019-11-15T15:56:58+05:30', @@ -273,23 +217,12 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 6, - }, + metadata: { jobId: 6, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', - context: { - traits: { - anonymousId: 'userId12345', - email: 'bob.dole@initech.com', - }, - }, - properties: { - brand: 'Aster', - product: 'Garments', - is_syncing: false, - }, + context: { traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com' } }, + properties: { brand: 'Aster', product: 'Garments', is_syncing: false }, messageId: '6d1f3ca8-e2d0-4d34-9926-44596171af0c', originalTimestamp: '2019-11-15T10:26:53Z', receivedAt: '2019-11-15T15:56:58+05:30', @@ -318,31 +251,18 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 7, - }, + metadata: { jobId: 7, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', - context: { - traits: { - anonymousId: 'userId12345', - email: 'bob.dole@initech.com', - }, - }, + context: { traits: { anonymousId: 'userId12345', email: 'bob.dole@initech.com' } }, properties: { brand: 'Aster', product: 'Garments', isSyncing: false, products: [ - { - product_id: '123', - price: '14', - }, - { - product_id: '123', - price: 14, - }, + { product_id: '123', price: '14' }, + { product_id: '123', price: 14 }, ], purchased: false, }, @@ -384,18 +304,12 @@ export const data = [ members: [ { email_address: 'bob.dole@initech.com', - merge_fields: { - FNAME: 'Bob', - LNAME: 'Dole', - ANONYMOUSI: 'userId12345', - }, + merge_fields: { FNAME: 'Bob', LNAME: 'Dole', ANONYMOUSI: 'userId12345' }, status: 'subscribed', }, { email_address: 'bob.dole@initech.com', - merge_fields: { - ANONYMOUSI: 'userId12345', - }, + merge_fields: { ANONYMOUSI: 'userId12345' }, status: 'subscribed', }, ], @@ -408,12 +322,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 2, - }, - { - jobId: 3, - }, + { jobId: 2, userId: 'u1' }, + { jobId: 3, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -451,10 +361,7 @@ export const data = [ JSON: { name: 'local_testing', occurred_at: '2019-11-15T10:26:53+00:00', - properties: { - brand: 'Aster', - product: 'Garments', - }, + properties: { brand: 'Aster', product: 'Garments' }, }, XML: {}, JSON_ARRAY: {}, @@ -463,11 +370,7 @@ export const data = [ files: {}, audienceId: 'aud111', }, - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -520,11 +423,7 @@ export const data = [ files: {}, audienceId: 'aud111', }, - metadata: [ - { - jobId: 7, - }, - ], + metadata: [{ jobId: 7, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -563,11 +462,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: [ - { - jobId: 6, - }, - ], + metadata: [{ jobId: 6, userId: 'u1' }], batched: false, statusCode: 400, error: 'Missing required value from "event"', @@ -598,11 +493,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], batched: false, statusCode: 400, error: @@ -648,9 +539,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'userId12345', channel: 'web', @@ -670,30 +559,15 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36', }, - integrations: { - All: true, - }, - traits: { - merge_fields: { - FIRSTNAME: 'Bob', - }, - status: 'subscribed', - }, + integrations: { All: true }, + traits: { merge_fields: { FIRSTNAME: 'Bob' }, status: 'subscribed' }, messageId: '21e475b2-3694-477b-afb6-5b94a81aac21', originalTimestamp: '2019-11-15T10:22:32Z', receivedAt: '2019-11-15T15:52:37+05:30', @@ -722,14 +596,10 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { type: 'identify', - traits: { - status: 'subscribed', - }, + traits: { status: 'subscribed' }, userId: 'emrichardson820+22822@gmail.com', channel: 'sources', context: { @@ -772,14 +642,10 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, message: { type: 'identify', - traits: { - status: 'subscribed', - }, + traits: { status: 'subscribed' }, userId: 'emrichardson820+22822@gmail.com', channel: 'sources', context: { @@ -822,14 +688,10 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, message: { type: 'identify', - traits: { - status: 'subscrib', - }, + traits: { status: 'subscrib' }, userId: 'emrichardson820+22822@gmail.com', channel: 'sources', context: { @@ -881,20 +743,12 @@ export const data = [ JSON: { members: [ { - merge_fields: { - FIRSTNAME: 'Bob', - }, + merge_fields: { FIRSTNAME: 'Bob' }, status: 'subscribed', email_address: 'bob.dole@initech.com', }, - { - status: 'subscribed', - email_address: 'emrichardson820+22822@gmail.com', - }, - { - status: 'subscribed', - email_address: 'emrichardson820+22822@gmail.com', - }, + { status: 'subscribed', email_address: 'emrichardson820+22822@gmail.com' }, + { status: 'subscribed', email_address: 'emrichardson820+22822@gmail.com' }, ], update_existing: true, }, @@ -905,15 +759,9 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 2, - }, - { - jobId: 3, - }, - { - jobId: 4, - }, + { jobId: 2, userId: 'u1' }, + { jobId: 3, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -951,11 +799,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], batched: false, statusCode: 400, error: diff --git a/test/integrations/destinations/mailjet/router/data.ts b/test/integrations/destinations/mailjet/router/data.ts index 85c96629ff..689e73ef2a 100644 --- a/test/integrations/destinations/mailjet/router/data.ts +++ b/test/integrations/destinations/mailjet/router/data.ts @@ -5,6 +5,94 @@ export const data = [ feature: 'router', module: 'destination', version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { jobId: 1, userId: 'u1' }, + message: { + userId: 'user@45', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + }, + }, + }, + ], + destType: 'mailjet', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + FORM: {}, + JSON: { + Action: 'addnoforce', + Contacts: [{ email: 'test@user.com', properties: { country: 'india' } }], + }, + JSON_ARRAY: {}, + XML: {}, + }, + files: {}, + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + }, + ], + }, + }, + }, + }, + { + name: 'mailjet', + description: 'batching with 1 listId and 1 action', + feature: 'router', + module: 'destination', + version: 'v0', input: { request: { body: { @@ -20,6 +108,7 @@ export const data = [ }, metadata: { jobId: 1, + userId: 'u1', }, message: { userId: 'user@45', @@ -80,6 +169,7 @@ export const data = [ metadata: [ { jobId: 1, + userId: 'u1', }, ], batched: true, @@ -103,4 +193,586 @@ export const data = [ }, }, }, + { + name: 'mailjet', + description: 'batching with multiple listId and multiple action combinations', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + message: { + userId: 'user@45', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + message: { + userId: 'user@46', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test2@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + externalId: [ + { + type: 'listId', + id: '58570', + }, + ], + }, + integrations: { + All: true, + mailjet: { + Action: 'unsub', + }, + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 3, + userId: 'u1', + }, + message: { + userId: 'user@47', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test3@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + externalId: [ + { + type: 'listId', + id: '58576', + }, + ], + }, + integrations: { + All: true, + mailjet: { + Action: 'addforce', + }, + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 4, + userId: 'u1', + }, + message: { + userId: 'user@48', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test4@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + externalId: [ + { + type: 'listId', + id: '58576', + }, + ], + }, + integrations: { + All: true, + mailjet: { + Action: 'unsub', + }, + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 5, + userId: 'u1', + }, + message: { + userId: 'user@49', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test5@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + externalId: [ + { + type: 'listId', + id: '585896', + }, + ], + }, + integrations: { + All: true, + mailjet: { + Action: 'unsub', + }, + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 6, + userId: 'u1', + }, + message: { + userId: 'user@49', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test5@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + externalId: [ + { + type: 'listId', + id: '584896', + }, + ], + }, + }, + }, + { + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [{ from: 'userCountry', to: 'country' }], + }, + }, + metadata: { + jobId: 7, + userId: 'u1', + }, + message: { + userId: 'user@50', + type: 'identify', + context: { + traits: { + age: '30', + email: 'test10@user.com', + phone: '7267286346802347827', + userId: 'sajal', + city: 'gondal', + userCountry: 'india', + lastName: 'dev', + username: 'Samle_putUserName', + firstName: 'rudderlabs', + }, + }, + }, + }, + ], + destType: 'mailjet', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58578/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'addnoforce', + Contacts: [ + { + email: 'test@user.com', + properties: { + country: 'india', + }, + }, + { + email: 'test10@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { jobId: 1, userId: 'u1' }, + { jobId: 7, userId: 'u1' }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58570/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'unsub', + Contacts: [ + { + email: 'test2@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58576/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'addforce', + Contacts: [ + { + email: 'test3@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 3, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/58576/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'unsub', + Contacts: [ + { + email: 'test4@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 4, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/585896/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'unsub', + Contacts: [ + { + email: 'test5@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 5, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.mailjet.com/v3/REST/contactslist/584896/managemanycontacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Basic ZHVtbXlBcGlLZXk6ZHVtbXlBcGlTZWNyZXQ=', + }, + params: {}, + body: { + JSON: { + Action: 'addnoforce', + Contacts: [ + { + email: 'test5@user.com', + properties: { + country: 'india', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 6, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { + apiKey: 'dummyApiKey', + apiSecret: 'dummyApiSecret', + listId: '58578', + contactPropertiesMapping: [ + { + from: 'userCountry', + to: 'country', + }, + ], + }, + }, + }, + ], + }, + }, + }, + }, ]; diff --git a/test/integrations/destinations/mailmodo/router/data.ts b/test/integrations/destinations/mailmodo/router/data.ts index c341259bbe..3b492b0a82 100644 --- a/test/integrations/destinations/mailmodo/router/data.ts +++ b/test/integrations/destinations/mailmodo/router/data.ts @@ -14,15 +14,8 @@ export const data = [ type: 'identify', event: 'Email Opened', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', properties: { @@ -34,31 +27,16 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: 'abc', - }, - Enabled: true, - }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abc' }, Enabled: true }, }, { message: { type: 'track', event: 'Email Opened', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', properties: { @@ -70,16 +48,8 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 3, - }, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: 'abc', - }, - Enabled: true, - }, + metadata: { jobId: 3, userId: 'u1' }, + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abc' }, Enabled: true }, }, { message: { @@ -87,13 +57,9 @@ export const data = [ userId: 'identified user id', anonymousId: 'anon-id-new', context: { - traits: { - trait1: 'new-val', - }, + traits: { trait1: 'new-val' }, ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, }, traits: { email: 'test@abc.com', @@ -105,31 +71,16 @@ export const data = [ }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 4, - }, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: 'abc', - }, - Enabled: true, - }, + metadata: { jobId: 4, userId: 'u1' }, + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abc' }, Enabled: true }, }, { message: { type: 'identify', event: 'Email Opened', sentAt: '2020-08-28T16:26:16.473Z', - context: { - library: { - name: 'analytics-node', - version: '0.0.3', - }, - }, - _metadata: { - nodeVersion: '10.22.0', - }, + context: { library: { name: 'analytics-node', version: '0.0.3' } }, + _metadata: { nodeVersion: '10.22.0' }, messageId: 'node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453', properties: { @@ -140,16 +91,8 @@ export const data = [ anonymousId: 'abcdeeeeeeeexxxx102', originalTimestamp: '2020-08-28T16:26:06.468Z', }, - metadata: { - jobId: 5, - }, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: '', - }, - Enabled: true, - }, + metadata: { jobId: 5, userId: 'u1' }, + destination: { Config: { apiKey: 'dummyApiKey', listName: '' }, Enabled: true }, }, ], destType: 'mailmodo', @@ -171,9 +114,7 @@ export const data = [ JSON: { listName: 'abc', values: [ - { - email: 'test@abc.com', - }, + { email: 'test@abc.com' }, { email: 'test@abc.com', data: { @@ -192,30 +133,17 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - mmApiKey: 'dummyApiKey', - 'Content-Type': 'application/json', - }, + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://api.mailmodo.com/api/v1/addToList/batch', }, metadata: [ - { - jobId: 2, - }, - { - jobId: 4, - }, + { jobId: 2, userId: 'u1' }, + { jobId: 4, userId: 'u1' }, ], batched: true, statusCode: 200, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: 'abc', - }, - Enabled: true, - }, + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abc' }, Enabled: true }, }, { batchedRequest: { @@ -238,37 +166,20 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - mmApiKey: 'dummyApiKey', - 'Content-Type': 'application/json', - }, + headers: { mmApiKey: 'dummyApiKey', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://api.mailmodo.com/api/v1/addEvent', }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: 'abc', - }, - Enabled: true, - }, + destination: { Config: { apiKey: 'dummyApiKey', listName: 'abc' }, Enabled: true }, }, { batched: false, error: 'Missing required value from ["traits.email","context.traits.email","properties.email"]', - metadata: [ - { - jobId: 5, - }, - ], + metadata: [{ jobId: 5, userId: 'u1' }], statTags: { destType: 'MAILMODO', errorCategory: 'dataValidation', @@ -278,13 +189,7 @@ export const data = [ module: 'destination', }, statusCode: 400, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: '', - }, - Enabled: true, - }, + destination: { Config: { apiKey: 'dummyApiKey', listName: '' }, Enabled: true }, }, ], }, diff --git a/test/integrations/destinations/marketo/router/data.ts b/test/integrations/destinations/marketo/router/data.ts index 0fa79b77df..d187792ea8 100644 --- a/test/integrations/destinations/marketo/router/data.ts +++ b/test/integrations/destinations/marketo/router/data.ts @@ -27,66 +27,33 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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: 'anon_id_success', - }, + traits: { anonymousId: 'anon_id_success' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Clicked', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'id1', - properties: { - name: 'Test Product', - }, + properties: { name: 'Test Product' }, originalTimestamp: '2020-12-17T21:00:59.176Z', type: 'track', sentAt: '2020-03-12T09:05:03.421Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { accountId: 'marketo_acct_id_success', clientId: 'marketo_client_id_success', clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, - customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, - ], + customActivityPropertyMap: [{ from: 'name', to: 'productName' }], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], rudderEventsMapping: [ { event: 'Product Clicked', @@ -134,56 +101,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -216,67 +147,33 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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: 'anon_id_success', - }, + traits: { anonymousId: 'anon_id_success' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Clicked', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'id1', - properties: { - name: 'Test Product', - product_id: 'prod_1', - }, + properties: { name: 'Test Product', product_id: 'prod_1' }, originalTimestamp: '2020-12-17T21:00:59.176Z', type: 'track', sentAt: '2020-12-17T21:00:59.176Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { accountId: 'marketo_acct_id_success', clientId: 'marketo_client_id_success', clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, - customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, - ], + customActivityPropertyMap: [{ from: 'name', to: 'productName' }], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], rudderEventsMapping: [ { event: 'Product Clicked', @@ -324,56 +221,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -395,10 +256,7 @@ export const data = [ userId: 'e17c5a5e-5e2f-430b-b497-fe3f1ea3a704', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -441,10 +299,7 @@ export const data = [ lastWebinarEventDate: '2022-09-15T20:00:00.000Z', nextWebinarEventDate: '2022-09-16T06:15:00.000Z', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.12.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '2.12.1' }, campaign: {}, 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', @@ -455,9 +310,7 @@ export const data = [ receivedAt: '2022-09-19T10:34:02.956Z', request_ip: '11.105.44.120', anonymousId: '0c7b8b80-9c43-4f8e-b2d2-5e2448a25040', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2022-09-19T10:34:02.000Z', }, destination: { @@ -468,38 +321,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -533,56 +365,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -604,9 +400,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { message: { @@ -615,10 +409,7 @@ export const data = [ userId: 'e17c5a5e-5e2f-430b-b497-fe3f1ea3a704', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -661,10 +452,7 @@ export const data = [ lastWebinarEventDate: '2022-09-15T20:00:00.000Z', nextWebinarEventDate: '2022-09-16T06:15:00.000Z', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.12.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '2.12.1' }, campaign: {}, 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', @@ -675,9 +463,7 @@ export const data = [ receivedAt: '2022-09-19T10:34:02.956Z', request_ip: '11.105.44.120', anonymousId: '0c7b8b80-9c43-4f8e-b2d2-5e2448a25040', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2022-09-19T10:34:02.000Z', }, destination: { @@ -688,38 +474,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -753,56 +518,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -824,9 +553,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, }, { message: { @@ -835,10 +562,7 @@ export const data = [ userId: 'e17c5a5e-5e2f-430b-b497-fe3f1ea3a704', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -881,10 +605,7 @@ export const data = [ lastWebinarEventDate: '2022-09-15T20:00:00.000Z', nextWebinarEventDate: '2022-09-16T06:15:00.000Z', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '2.12.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '2.12.1' }, campaign: {}, 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', @@ -895,9 +616,7 @@ export const data = [ receivedAt: '2022-09-19T10:34:02.956Z', request_ip: '11.105.44.120', anonymousId: '0c7b8b80-9c43-4f8e-b2d2-5e2448a25040', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2022-09-19T10:34:02.000Z', }, destination: { @@ -908,38 +627,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -973,56 +671,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1044,9 +706,7 @@ export const data = [ isConnectionEnabled: true, isProcessorEnabled: true, }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, }, ], destType: 'marketo', @@ -1090,12 +750,7 @@ export const data = [ files: {}, }, metadata: [ - { - destInfo: { - authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - }, - jobId: 1, - }, + { destInfo: { authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVwe' }, jobId: 1, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -1105,18 +760,8 @@ export const data = [ clientId: 'marketo_client_id_success', clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, - customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, - ], + customActivityPropertyMap: [{ from: 'name', to: 'productName' }], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], rudderEventsMapping: [ { event: 'Product Clicked', @@ -1164,56 +809,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1259,12 +868,7 @@ export const data = [ files: {}, }, metadata: [ - { - destInfo: { - authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - }, - jobId: 2, - }, + { destInfo: { authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVwe' }, jobId: 2, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -1274,18 +878,8 @@ export const data = [ clientId: 'marketo_client_id_success', clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, - customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, - ], + customActivityPropertyMap: [{ from: 'name', to: 'productName' }], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], rudderEventsMapping: [ { event: 'Product Clicked', @@ -1333,56 +927,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1402,17 +960,9 @@ export const data = [ statusCode: 400, error: '{"message":"Request Failed for marketo, Lookup field \'userId\' not found (Aborted).[Marketo Transformer]: During lead look up using email","destinationResponse":{"response":{"requestId":"142e4#1835b117b76","success":false,"errors":[{"code":"1006","message":"Lookup field \'userId\' not found"}]},"status":200}}', - statTags: { - errorCategory: 'network', - errorType: 'aborted', - }, + statTags: { errorCategory: 'network', errorType: 'aborted' }, metadata: [ - { - destInfo: { - authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke', - }, - jobId: 3, - }, + { destInfo: { authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke' }, jobId: 3, userId: 'u1' }, ], destination: { Config: { @@ -1422,38 +972,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -1487,56 +1016,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1577,38 +1070,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -1642,56 +1114,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1714,12 +1150,7 @@ export const data = [ isProcessorEnabled: true, }, metadata: [ - { - destInfo: { - authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke', - }, - jobId: 4, - }, + { destInfo: { authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke' }, jobId: 4, userId: 'u1' }, ], }, { @@ -1755,12 +1186,7 @@ export const data = [ files: {}, }, metadata: [ - { - destInfo: { - authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke', - }, - jobId: 5, - }, + { destInfo: { authKey: '1mMy5cqbtfuaKZv1IhVQKnBdVke' }, jobId: 5, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -1772,38 +1198,17 @@ export const data = [ trackAnonymousEvents: false, createIfNotExist: true, rudderEventsMapping: [ - { - event: 'acq_signup_completed', - marketoActivityId: '100026', - }, - { - event: 'act_createwebinarform_submit', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_style', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_view', - marketoActivityId: '100025', - }, - { - event: 'act_webinar_join', - marketoActivityId: '100025', - }, - { - event: 'act_presentation_addteammember', - marketoActivityId: '100025', - }, + { event: 'acq_signup_completed', marketoActivityId: '100026' }, + { event: 'act_createwebinarform_submit', marketoActivityId: '100025' }, + { event: 'act_presentation_style', marketoActivityId: '100025' }, + { event: 'act_webinar_view', marketoActivityId: '100025' }, + { event: 'act_webinar_join', marketoActivityId: '100025' }, + { event: 'act_presentation_addteammember', marketoActivityId: '100025' }, { event: 'act_engagement_discussions_savediscussion', marketoActivityId: '100025', }, - { - event: 'act_engagement_networking_savetime', - marketoActivityId: '100025', - }, + { event: 'act_engagement_networking_savetime', marketoActivityId: '100025' }, ], }, destinationDefinition: { @@ -1837,56 +1242,20 @@ export const data = [ responseType: 'JSON', rules: { retryable: [ - { - success: 'false', - 'errors.0.code': 600, - }, - { - success: 'false', - 'errors.0.code': 601, - }, - { - success: 'false', - 'errors.0.code': 602, - }, - { - success: 'false', - 'errors.0.code': 604, - }, - { - success: 'false', - 'errors.0.code': 606, - }, - { - success: 'false', - 'errors.0.code': 607, - }, - { - success: 'false', - 'errors.0.code': 608, - }, - { - success: 'false', - 'errors.0.code': 611, - }, + { success: 'false', 'errors.0.code': 600 }, + { success: 'false', 'errors.0.code': 601 }, + { success: 'false', 'errors.0.code': 602 }, + { success: 'false', 'errors.0.code': 604 }, + { success: 'false', 'errors.0.code': 606 }, + { success: 'false', 'errors.0.code': 607 }, + { success: 'false', 'errors.0.code': 608 }, + { success: 'false', 'errors.0.code': 611 }, ], abortable: [ - { - success: 'false', - 'errors.0.code': 603, - }, - { - success: 'false', - 'errors.0.code': 605, - }, - { - success: 'false', - 'errors.0.code': 609, - }, - { - success: 'false', - 'errors.0.code': 610, - }, + { success: 'false', 'errors.0.code': 603 }, + { success: 'false', 'errors.0.code': 605 }, + { success: 'false', 'errors.0.code': 609 }, + { success: 'false', 'errors.0.code': 610 }, ], }, }, @@ -1942,42 +1311,20 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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: 'anon_id_success', - }, + traits: { anonymousId: 'anon_id_success' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Clicked', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'id1', - properties: { - name: 'Test Product', - product_id: 'prod_1', - }, + properties: { name: 'Test Product', product_id: 'prod_1' }, originalTimestamp: '2020-12-17T21:00:59.176Z', type: 'track', sentAt: '2020-12-17T21:00:59.176Z', @@ -1990,21 +1337,10 @@ export const data = [ clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - { - from: 'product_id', - to: 'productId', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, + { from: 'name', to: 'productName' }, + { from: 'product_id', to: 'productId' }, ], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], createIfNotExist: true, rudderEventsMapping: [ { @@ -2015,17 +1351,7 @@ export const data = [ ], }, }, - metadata: [ - { - jobId: 1, - }, - { - jobId: 1, - }, - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1 }, { jobId: 1 }, { jobId: 1 }], batched: false, statusCode: 200, }, @@ -2058,12 +1384,7 @@ export const data = [ { activityDate: '2020-12-17T21:00:59.176Z', activityTypeId: 100001, - attributes: [ - { - name: 'productId', - value: 'prod_1', - }, - ], + attributes: [{ name: 'productId', value: 'prod_1' }], leadId: 4, primaryAttributeValue: 'Test Product', }, @@ -2075,19 +1396,7 @@ export const data = [ }, files: {}, }, - metadata: [ - [ - { - jobId: 1, - }, - { - jobId: 1, - }, - { - jobId: 1, - }, - ], - ], + metadata: [[{ jobId: 1 }, { jobId: 1 }, { jobId: 1 }]], batched: false, statusCode: 200, destination: { @@ -2098,21 +1407,10 @@ export const data = [ clientSecret: 'marketo_client_secret_success', trackAnonymousEvents: true, customActivityPropertyMap: [ - { - from: 'name', - to: 'productName', - }, - { - from: 'product_id', - to: 'productId', - }, - ], - leadTraitMapping: [ - { - from: 'leadScore', - to: 'customLeadScore', - }, + { from: 'name', to: 'productName' }, + { from: 'product_id', to: 'productId' }, ], + leadTraitMapping: [{ from: 'leadScore', to: 'customLeadScore' }], createIfNotExist: true, rudderEventsMapping: [ { diff --git a/test/integrations/destinations/marketo_static_list/router/data.ts b/test/integrations/destinations/marketo_static_list/router/data.ts index 840ad773b3..6525f7419d 100644 --- a/test/integrations/destinations/marketo_static_list/router/data.ts +++ b/test/integrations/destinations/marketo_static_list/router/data.ts @@ -38,42 +38,15 @@ export const data = [ type: 'audiencelist', properties: { listData: { - add: [ - { - id: 1, - }, - { - id: 2, - }, - { - id: 3, - }, - ], - remove: [ - { - id: 4, - }, - { - id: 5, - }, - { - id: 6, - }, - ], + add: [{ id: 1 }, { id: 2 }, { id: 3 }], + remove: [{ id: 4 }, { id: 5 }, { id: 6 }], }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { destination: { @@ -104,1074 +77,365 @@ export const data = [ 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, - }, + { 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: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'marketo_static_list', @@ -1197,12 +461,7 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -1216,22 +475,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - jobId: 1, - }, + { destInfo: { authKey: '1zia9wKshXt80YksLmUdJnr7IHI' }, jobId: 1, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -1269,12 +518,7 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -1288,22 +532,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - jobId: 2, - }, + { destInfo: { authKey: '1zia9wKshXt80YksLmUdJnr7IHI' }, jobId: 2, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -1367,9 +601,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1001, - }, + fields: { id: 1001 }, channel: 'sources', context: { sources: { @@ -1378,20 +610,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - identifierType: 'id', - }, - ], + externalId: [{ type: 'marketoStaticListId', identifierType: 'id' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { destination: { @@ -1417,9 +642,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1002, - }, + fields: { id: 1002 }, channel: 'sources', context: { sources: { @@ -1428,20 +651,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - identifierType: 'id', - }, - ], + externalId: [{ type: 'marketoStaticListId', identifierType: 'id' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { destination: { @@ -1467,9 +683,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1003, - }, + fields: { id: 1003 }, channel: 'sources', context: { sources: { @@ -1478,20 +692,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - identifierType: 'id', - }, - ], + externalId: [{ type: 'marketoStaticListId', identifierType: 'id' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { destination: { @@ -1518,12 +725,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - identifierType: 'id', - type: 'marketoStaticListId', - }, - ], + externalId: [{ identifierType: 'id', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -1534,14 +736,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2001', - }, + fields: { id: '2001' }, type: 'record', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, }, { destination: { @@ -1568,12 +766,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - identifierType: 'id', - type: 'marketoStaticListId', - }, - ], + externalId: [{ identifierType: 'id', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -1584,14 +777,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2002', - }, + fields: { id: '2002' }, type: 'record', }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, }, { destination: { @@ -1618,12 +807,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - identifierType: 'id', - type: 'marketoStaticListId', - }, - ], + externalId: [{ identifierType: 'id', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -1634,14 +818,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2003', - }, + fields: { id: '2003' }, type: 'record', }, - metadata: { - jobId: 6, - }, + metadata: { jobId: 6, userId: 'u1' }, }, { destination: { @@ -1671,42 +851,15 @@ export const data = [ type: 'audiencelist', properties: { listData: { - add: [ - { - id: 101, - }, - { - id: 102, - }, - { - id: 103, - }, - ], - remove: [ - { - id: 4, - }, - { - id: 5, - }, - { - id: 6, - }, - ], + add: [{ id: 101 }, { id: 102 }, { id: 103 }], + remove: [{ id: 4 }, { id: 5 }, { id: 6 }], }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 7, - }, + metadata: { jobId: 7, userId: 'u1' }, }, { destination: { @@ -1737,1074 +890,365 @@ export const data = [ 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, - }, + { 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: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 8, - }, + metadata: { jobId: 8, userId: 'u1' }, }, ], destType: 'marketo_static_list', @@ -2830,34 +1274,14 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 4, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 5, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 6, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 4, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 5, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 6, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -2895,34 +1319,14 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 1, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 2, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 3, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 1, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 2, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 3, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -2960,12 +1364,7 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -2979,22 +1378,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 7, - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - }, + { jobId: 7, destInfo: { authKey: '1zia9wKshXt80YksLmUdJnr7IHI' }, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -3032,12 +1421,7 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, { @@ -3051,22 +1435,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 8, - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - }, + { jobId: 8, destInfo: { authKey: '1zia9wKshXt80YksLmUdJnr7IHI' }, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -3131,9 +1505,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1001, - }, + fields: { id: 1001 }, channel: 'sources', context: { sources: { @@ -3142,20 +1514,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - id: 'id001', - }, - ], + externalId: [{ type: 'marketoStaticListId', id: 'id001' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { destination: { @@ -3181,9 +1546,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1002, - }, + fields: { id: 1002 }, channel: 'sources', context: { sources: { @@ -3192,20 +1555,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - id: 'id002', - }, - ], + externalId: [{ type: 'marketoStaticListId', id: 'id002' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { destination: { @@ -3231,9 +1587,7 @@ export const data = [ message: { type: 'record', action: 'insert', - fields: { - id: 1003, - }, + fields: { id: 1003 }, channel: 'sources', context: { sources: { @@ -3242,20 +1596,13 @@ export const data = [ job_run_id: 'ck99nbd2kqiljdihhkh0', task_run_id: 'ck99nbd2kqiljdihhkhg', }, - externalId: [ - { - type: 'marketoStaticListId', - id: 'id001', - }, - ], + externalId: [{ type: 'marketoStaticListId', id: 'id001' }], destinationFields: 'id', mappedToDestination: 'true', }, recordId: '3', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { destination: { @@ -3282,12 +1629,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - id: 'id002', - type: 'marketoStaticListId', - }, - ], + externalId: [{ id: 'id002', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -3298,14 +1640,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2001', - }, + fields: { id: '2001' }, type: 'record', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, }, { destination: { @@ -3332,12 +1670,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - id: 'id001', - type: 'marketoStaticListId', - }, - ], + externalId: [{ id: 'id001', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -3348,14 +1681,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2002', - }, + fields: { id: '2002' }, type: 'record', }, - metadata: { - jobId: 5, - }, + metadata: { jobId: 5, userId: 'u1' }, }, { destination: { @@ -3382,12 +1711,7 @@ export const data = [ action: 'delete', context: { destinationFields: 'id', - externalId: [ - { - id: 'id002', - type: 'marketoStaticListId', - }, - ], + externalId: [{ id: 'id002', type: 'marketoStaticListId' }], mappedToDestination: 'true', sources: { job_id: 'sf', @@ -3398,14 +1722,10 @@ export const data = [ }, recordId: '2', rudderId: '2', - fields: { - id: '2003', - }, + fields: { id: '2003' }, type: 'record', }, - metadata: { - jobId: 6, - }, + metadata: { jobId: 6, userId: 'u1' }, }, ], }, @@ -3430,22 +1750,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 5, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 5, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -3483,28 +1793,13 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 1, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 3, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 1, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 3, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -3542,28 +1837,13 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 4, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, - { - jobId: 6, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 4, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, + { jobId: 6, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -3601,22 +1881,12 @@ export const data = [ 'Content-Type': 'application/json', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, ], metadata: [ - { - jobId: 2, - destInfo: { - authKey: '1zwa1wKshSt81YksKmUdJnr4IOK', - }, - }, + { jobId: 2, destInfo: { authKey: '1zwa1wKshSt81YksKmUdJnr4IOK' }, userId: 'u1' }, ], batched: true, statusCode: 200, diff --git a/test/integrations/destinations/mautic/router/data.ts b/test/integrations/destinations/mautic/router/data.ts index 9ac6c8714f..e0924053f8 100644 --- a/test/integrations/destinations/mautic/router/data.ts +++ b/test/integrations/destinations/mautic/router/data.ts @@ -14,9 +14,7 @@ export const data = [ anonymousId: 'anon-id-new', context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, traits: { firstName: 'Test', lastName: 'Rudderlabs', @@ -52,9 +50,7 @@ export const data = [ userName: 'TestRudderlabs45823@gmail.com', }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, ], destType: 'mautic', @@ -105,11 +101,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -141,9 +133,7 @@ export const data = [ anonymousId: 'anon-id-new', context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, traits: { firstName: 'Test', lastName: 'Rudderlabs', @@ -180,9 +170,7 @@ export const data = [ userName: 'abcdef', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'mautic', @@ -196,11 +184,7 @@ export const data = [ body: { output: [ { - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { errorCategory: 'dataValidation', errorType: 'configuration', @@ -241,17 +225,8 @@ export const data = [ message: { userId: 'user123', groupId: '17', - context: { - externalId: [ - { - type: 'mauticContactId', - id: '246', - }, - ], - }, - traits: { - type: 'Segments', - }, + context: { externalId: [{ type: 'mauticContactId', id: '246' }] }, + traits: { type: 'Segments' }, type: 'group', }, destination: { @@ -262,9 +237,7 @@ export const data = [ userName: 'TestRudderlabs45823@gmail.com', }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'mautic', @@ -289,19 +262,10 @@ export const data = [ 'Basic VGVzdFJ1ZGRlcmxhYnM0NTgyM0BnbWFpbC5jb206ZHVtbXlQYXNzd29yZA==', }, params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/moengage/router/data.ts b/test/integrations/destinations/moengage/router/data.ts index a5664906e5..0f8a3de41b 100644 --- a/test/integrations/destinations/moengage/router/data.ts +++ b/test/integrations/destinations/moengage/router/data.ts @@ -21,15 +21,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.6', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.6', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/testing/script-test.html', referrer: '', @@ -37,13 +31,9 @@ export const data = [ title: '', url: 'http://localhost:3243/testing/script-test.html', }, - screen: { - density: 2, - }, + screen: { density: 2 }, traits: { - company: { - id: 'abc123', - }, + company: { id: 'abc123' }, createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', email: 'rudderTest@gmail.com', name: 'Rudder Test', @@ -53,9 +43,7 @@ export const data = [ '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', }, event: 'Order Completed', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'a0adfab9-baf7-4e09-a2ce-bbe2844c324a', originalTimestamp: '2020-10-16T08:10:12.782Z', properties: { @@ -125,9 +113,7 @@ export const data = [ type: 'track', userId: 'rudder123', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', Name: 'MoEngage Testing', @@ -136,9 +122,7 @@ export const data = [ Name: 'MOENGAGE', DisplayName: 'MoEngage', Config: { - destConfig: { - defaultConfig: ['apiId', 'apiKey', 'region'], - }, + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, excludeKeys: [], includeKeys: [], supportedSourceTypes: [ @@ -175,15 +159,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.6', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.6', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.6' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/testing/script-test.html', referrer: '', @@ -191,13 +169,9 @@ export const data = [ title: '', url: 'http://localhost:3243/testing/script-test.html', }, - screen: { - density: 2, - }, + screen: { density: 2 }, traits: { - company: { - id: 'abc123', - }, + company: { id: 'abc123' }, createdAt: 'Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)', email: 'rudderTest@gmail.com', name: 'Rudder Test', @@ -206,9 +180,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: 'e108eb05-f6cd-4624-ba8c-568f2e2b3f92', originalTimestamp: '2020-10-16T08:26:14.938Z', receivedAt: '2020-10-16T13:56:14.945+05:30', @@ -218,9 +190,7 @@ export const data = [ type: 'identify', userId: 'rudder123', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { ID: '1iuTZs6eEZVMm6GjRBe6bNShaL3', Name: 'MoEngage Testing', @@ -229,9 +199,7 @@ export const data = [ Name: 'MOENGAGE', DisplayName: 'MoEngage', Config: { - destConfig: { - defaultConfig: ['apiId', 'apiKey', 'region'], - }, + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, excludeKeys: [], includeKeys: [], supportedSourceTypes: [ @@ -354,11 +322,7 @@ export const data = [ files: {}, userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -369,9 +333,7 @@ export const data = [ Name: 'MOENGAGE', DisplayName: 'MoEngage', Config: { - destConfig: { - defaultConfig: ['apiId', 'apiKey', 'region'], - }, + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, excludeKeys: [], includeKeys: [], supportedSourceTypes: [ @@ -429,11 +391,7 @@ export const data = [ files: {}, userId: '4eb021e9-a2af-4926-ae82-fe996d12f3c5', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -444,9 +402,7 @@ export const data = [ Name: 'MOENGAGE', DisplayName: 'MoEngage', Config: { - destConfig: { - defaultConfig: ['apiId', 'apiKey', 'region'], - }, + destConfig: { defaultConfig: ['apiId', 'apiKey', 'region'] }, excludeKeys: [], includeKeys: [], supportedSourceTypes: [ diff --git a/test/integrations/destinations/monday/router/data.ts b/test/integrations/destinations/monday/router/data.ts index eefc106274..3be8b129c5 100644 --- a/test/integrations/destinations/monday/router/data.ts +++ b/test/integrations/destinations/monday/router/data.ts @@ -20,23 +20,16 @@ export const data = [ whitelistedEvents: [{ eventName: 'create an item' }], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { event: 'create an item', type: 'track', sentAt: '2021-01-03T17:02:53.195Z', userId: 'user@27', channel: 'web', - properties: { - name: 'Task 1', - }, + properties: { name: 'Task 1' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -44,13 +37,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -69,18 +57,13 @@ export const data = [ boardId: '339283933', groupTitle: 'Next month', columnToPropertyMapping: [ - { - from: 'Status', - to: 'status', - }, + { from: 'Status', to: 'status' }, { from: 'Email', to: 'emailId' }, ], whitelistedEvents: [{ eventName: 'create an item' }], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'create an item', type: 'track', @@ -94,10 +77,7 @@ export const data = [ emailText: 'emailId', }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -105,13 +85,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -155,11 +130,7 @@ export const data = [ type: 'REST', version: '1', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -196,11 +167,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -210,10 +177,7 @@ export const data = [ boardId: '339283933', groupTitle: 'Next month', columnToPropertyMapping: [ - { - from: 'Status', - to: 'status', - }, + { from: 'Status', to: 'status' }, { from: 'Email', to: 'emailId' }, ], whitelistedEvents: [{ eventName: 'create an item' }], diff --git a/test/integrations/destinations/monetate/router/data.ts b/test/integrations/destinations/monetate/router/data.ts index 09a7f8073d..eff487bd73 100644 --- a/test/integrations/destinations/monetate/router/data.ts +++ b/test/integrations/destinations/monetate/router/data.ts @@ -13,54 +13,31 @@ export const data = [ message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', context: { - screen: { - height: 22, - width: 11, - }, + screen: { height: 22, width: 11 }, device: { id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', manufacturer: 'Xiaomi', model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, ip: '0.0.0.0', }, - traits: { - address: { - city: 'Kol', - country: 'Ind', - }, - }, + traits: { address: { city: 'Kol', country: 'Ind' } }, event: 'Product Viewed', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', - properties: { - monetateId: '1234', - product_id: 'prodId', - }, + properties: { monetateId: '1234', product_id: 'prodId' }, timestamp: '2019-09-01T15:46:51.693229+05:30', type: 'track', userId: 'newUser', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { monetateChannel: 'channel', @@ -73,61 +50,34 @@ export const data = [ message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', context: { - screen: { - height: 22, - width: 11, - }, + screen: { height: 22, width: 11 }, device: { id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', manufacturer: 'Xiaomi', model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, ip: '0.0.0.0', }, - traits: { - address: { - city: 'Kol', - country: 'Ind', - }, - }, + traits: { address: { city: 'Kol', country: 'Ind' } }, event: 'Product List Viewed', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { monetateId: '1234', - products: [ - { - product_id: 1, - }, - { - product_id: 2, - }, - ], + products: [{ product_id: 1 }, { product_id: 2 }], }, timestamp: '2019-09-01T15:46:51.693229+05:30', type: 'track', userId: 'newUser', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { monetateChannel: 'channel', @@ -153,31 +103,17 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { monetateId: '1234', events: [ - { - eventType: 'monetate:context:IpAddress', - ipAddress: '0.0.0.0', - }, - { - eventType: 'monetate:context:ScreenSize', - height: 22, - width: 11, - }, + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, { eventType: 'monetate:context:ProductDetailView', - products: [ - { - productId: 'prodId', - sku: '', - }, - ], + products: [{ productId: 'prodId', sku: '' }], }, ], customerId: 'newUser', @@ -189,11 +125,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -210,27 +142,15 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://engine.monetate.net/api/engine/v1/decide/retailer', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { monetateId: '1234', events: [ - { - eventType: 'monetate:context:IpAddress', - ipAddress: '0.0.0.0', - }, - { - eventType: 'monetate:context:ScreenSize', - height: 22, - width: 11, - }, - { - eventType: 'monetate:context:ProductThumbnailView', - products: ['1', '2'], - }, + { eventType: 'monetate:context:IpAddress', ipAddress: '0.0.0.0' }, + { eventType: 'monetate:context:ScreenSize', height: 22, width: 11 }, + { eventType: 'monetate:context:ProductThumbnailView', products: ['1', '2'] }, ], customerId: 'newUser', channel: 'channel', @@ -241,11 +161,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/mp/processor/data.ts b/test/integrations/destinations/mp/processor/data.ts index a6ba51ee78..bdfa82242e 100644 --- a/test/integrations/destinations/mp/processor/data.ts +++ b/test/integrations/destinations/mp/processor/data.ts @@ -4986,7 +4986,8 @@ export const data = [ status: 200, body: [ { - error: 'Alias call is deprecated in `Simplified ID merge`', + error: + 'The use of the alias call in the context of the `Simplified ID merge` feature is not supported anymore.', statTags: { destType: 'MP', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/mp/router/data.ts b/test/integrations/destinations/mp/router/data.ts index 7058929909..807cebedec 100644 --- a/test/integrations/destinations/mp/router/data.ts +++ b/test/integrations/destinations/mp/router/data.ts @@ -20,10 +20,7 @@ export const data = [ useOldMapping: true, strictMode: true, }), - metadata: { - jobId: 1, - additionalProp: 1, - }, + metadata: { jobId: 1, additionalProp: 1, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -36,18 +33,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: {}, page: { path: '/destinations/mixpanel', @@ -62,9 +51,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', originalTimestamp: '2020-01-24T06:29:02.358Z', page: { @@ -94,10 +81,7 @@ export const data = [ identityMergeApi: 'simplified', strictMode: true, }), - metadata: { - jobId: 2, - additionalProp: 2, - }, + metadata: { jobId: 2, additionalProp: 2, userId: 'u1' }, message: { anonymousId: 'anonId01', channel: 'mobile', @@ -116,40 +100,20 @@ export const data = [ type: 'ios', token: 'test_device_token', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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: 'iOS', - version: '8.1.0', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'iOS', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Viewed', - integrations: { - All: true, - }, + integrations: { All: true }, userId: 'userId01', messageId: 'id2', - properties: { - name: 'T-Shirt', - revenue: 18.9, - }, + properties: { name: 'T-Shirt', revenue: 18.9 }, type: 'track', originalTimestamp: '2020-01-24T06:29:02.362Z', receivedAt: '2020-01-24T11:59:02.403+05:30', @@ -165,10 +129,7 @@ export const data = [ useOldMapping: true, strictMode: true, }), - metadata: { - jobId: 3, - additionalProp: 3, - }, + metadata: { jobId: 3, additionalProp: 3, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -180,18 +141,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -211,9 +164,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -243,10 +194,7 @@ export const data = [ identityMergeApi: 'simplified', strictMode: true, }), - metadata: { - jobId: 4, - additionalProp: 4, - }, + metadata: { jobId: 4, additionalProp: 4, userId: 'u1' }, message: { anonymousId: 'anonId01', channel: 'web', @@ -258,18 +206,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -291,9 +231,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -320,10 +258,7 @@ export const data = [ token: 'test_api_token', strictMode: true, }), - metadata: { - jobId: 5, - additionalProp: 5, - }, + metadata: { jobId: 5, additionalProp: 5, userId: 'u1' }, message: { anonymousId: '5094f5704b9cf2b3', channel: 'mobile', @@ -342,44 +277,21 @@ export const data = [ type: 'ios', token: 'test_device_token', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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: 'iOS', - version: '8.1.0', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'iOS', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', - traits: { - anonymousId: '5094f5704b9cf2b3', - userId: 'test_user_id', - }, + traits: { anonymousId: '5094f5704b9cf2b3', userId: 'test_user_id' }, 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, - }, + integrations: { All: true }, userId: 'test_user_id', messageId: 'id2', - properties: { - name: 'MainActivity', - automatic: true, - }, + properties: { name: 'MainActivity', automatic: true }, originalTimestamp: '2020-03-12T09:05:03.421Z', type: 'identify', sentAt: '2020-03-12T09:05:13.042Z', @@ -397,10 +309,7 @@ export const data = [ ], strictMode: true, }), - metadata: { - jobId: 6, - additionalProp: 6, - }, + metadata: { jobId: 6, additionalProp: 6, userId: 'u1' }, message: { anonymousId: 'anonId06', channel: 'web', @@ -412,18 +321,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/mixpanel', referrer: '', @@ -437,9 +338,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -450,9 +349,7 @@ export const data = [ initial_referrer: 'https://docs.rudderstack.com', initial_referring_domain: 'docs.rudderstack.com', }, - traits: { - company: 'testComp', - }, + traits: { company: 'testComp' }, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', originalTimestamp: '2020-01-24T06:29:02.362Z', receivedAt: '2020-01-24T11:59:02.403+05:30', @@ -475,10 +372,7 @@ export const data = [ ], strictMode: true, }), - metadata: { - jobId: 7, - additionalProp: 7, - }, + metadata: { jobId: 7, additionalProp: 7, userId: 'u1' }, message: { anonymousId: 'anonId06', channel: 'web', @@ -490,18 +384,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/mixpanel', referrer: '', @@ -515,9 +401,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -542,9 +426,7 @@ export const data = [ destType: 'mp', }, method: 'POST', - headers: { - 'X-Feature-Gzip-Support': '?1', - }, + headers: { 'X-Feature-Gzip-Support': '?1' }, }, }, output: { @@ -562,9 +444,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: {}, @@ -577,12 +457,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - additionalProp: 1, - }, - ], + metadata: [{ jobId: 1, additionalProp: 1, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -635,9 +510,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: {}, @@ -651,12 +524,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 2, - additionalProp: 2, - }, - ], + metadata: [{ jobId: 2, additionalProp: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -709,9 +577,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: {}, @@ -726,18 +592,9 @@ export const data = [ }, ], metadata: [ - { - jobId: 3, - additionalProp: 3, - }, - { - jobId: 4, - additionalProp: 4, - }, - { - jobId: 5, - additionalProp: 5, - }, + { jobId: 3, additionalProp: 3, userId: 'u1' }, + { jobId: 4, additionalProp: 4, userId: 'u1' }, + { jobId: 5, additionalProp: 5, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -801,12 +658,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 6, - additionalProp: 6, - }, - ], + metadata: [{ jobId: 6, additionalProp: 6, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -815,11 +667,7 @@ export const data = [ apiSecret: 'test_api_secret', token: 'test_api_token', prefixProperties: true, - groupKeySettings: [ - { - groupKey: 'company', - }, - ], + groupKeySettings: [{ groupKey: 'company' }], strictMode: true, useNativeSDK: false, }, @@ -835,12 +683,7 @@ export const data = [ }, }, { - metadata: [ - { - jobId: 7, - additionalProp: 7, - }, - ], + metadata: [{ jobId: 7, additionalProp: 7, userId: 'u1' }], batched: false, statusCode: 400, error: @@ -860,11 +703,7 @@ export const data = [ token: 'test_api_token', prefixProperties: true, useNativeSDK: false, - groupKeySettings: [ - { - groupKey: 'company', - }, - ], + groupKeySettings: [{ groupKey: 'company' }], strictMode: true, }, DestinationDefinition: { @@ -901,10 +740,7 @@ export const data = [ useOldMapping: true, strictMode: true, }), - metadata: { - jobId: 1, - additionalProp: 1, - }, + metadata: { jobId: 1, additionalProp: 1, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -917,18 +753,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: {}, page: { path: '/destinations/mixpanel', @@ -943,9 +771,7 @@ export const data = [ 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, - }, + integrations: { All: true }, messageId: 'dd266c67-9199-4a52-ba32-f46ddde67312', originalTimestamp: '2020-01-24T06:29:02.358Z', page: { @@ -975,10 +801,7 @@ export const data = [ identityMergeApi: 'simplified', strictMode: true, }), - metadata: { - jobId: 2, - additionalProp: 2, - }, + metadata: { jobId: 2, additionalProp: 2, userId: 'u1' }, message: { anonymousId: 'anonId01', channel: 'mobile', @@ -997,40 +820,20 @@ export const data = [ type: 'ios', token: 'test_device_token', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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: 'iOS', - version: '8.1.0', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'iOS', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Viewed', - integrations: { - All: true, - }, + integrations: { All: true }, userId: 'userId01', messageId: 'id2', - properties: { - name: 'T-Shirt', - revenue: 18.9, - }, + properties: { name: 'T-Shirt', revenue: 18.9 }, type: 'track', originalTimestamp: '2020-01-24T06:29:02.362Z', receivedAt: '2020-01-24T11:59:02.403+05:30', @@ -1046,10 +849,7 @@ export const data = [ useOldMapping: true, strictMode: true, }), - metadata: { - jobId: 3, - additionalProp: 3, - }, + metadata: { jobId: 3, additionalProp: 3, userId: 'u1' }, message: { anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', @@ -1061,18 +861,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -1092,9 +884,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1124,10 +914,7 @@ export const data = [ identityMergeApi: 'simplified', strictMode: true, }), - metadata: { - jobId: 4, - additionalProp: 4, - }, + metadata: { jobId: 4, additionalProp: 4, userId: 'u1' }, message: { anonymousId: 'anonId01', channel: 'web', @@ -1139,18 +926,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { city: 'Disney', country: 'USA', @@ -1172,9 +951,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1201,10 +978,7 @@ export const data = [ token: 'test_api_token', strictMode: true, }), - metadata: { - jobId: 5, - additionalProp: 5, - }, + metadata: { jobId: 5, additionalProp: 5, userId: 'u1' }, message: { anonymousId: '5094f5704b9cf2b3', channel: 'mobile', @@ -1223,44 +997,21 @@ export const data = [ type: 'ios', token: 'test_device_token', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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: 'iOS', - version: '8.1.0', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'iOS', version: '8.1.0' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', - traits: { - anonymousId: '5094f5704b9cf2b3', - userId: 'test_user_id', - }, + traits: { anonymousId: '5094f5704b9cf2b3', userId: 'test_user_id' }, 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, - }, + integrations: { All: true }, userId: 'test_user_id', messageId: 'id2', - properties: { - name: 'MainActivity', - automatic: true, - }, + properties: { name: 'MainActivity', automatic: true }, originalTimestamp: '2020-03-12T09:05:03.421Z', type: 'identify', sentAt: '2020-03-12T09:05:13.042Z', @@ -1278,10 +1029,7 @@ export const data = [ ], strictMode: true, }), - metadata: { - jobId: 6, - additionalProp: 6, - }, + metadata: { jobId: 6, additionalProp: 6, userId: 'u1' }, message: { anonymousId: 'anonId06', channel: 'web', @@ -1293,18 +1041,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1318,9 +1058,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1331,9 +1069,7 @@ export const data = [ initial_referrer: 'https://docs.rudderstack.com', initial_referring_domain: 'docs.rudderstack.com', }, - traits: { - company: 'testComp', - }, + traits: { company: 'testComp' }, messageId: '2536eda4-d638-4c93-8014-8ffe3f083214', originalTimestamp: '2020-01-24T06:29:02.362Z', receivedAt: '2020-01-24T11:59:02.403+05:30', @@ -1356,10 +1092,7 @@ export const data = [ ], strictMode: true, }), - metadata: { - jobId: 7, - additionalProp: 7, - }, + metadata: { jobId: 7, additionalProp: 7, userId: 'u1' }, message: { anonymousId: 'anonId06', channel: 'web', @@ -1371,18 +1104,10 @@ export const data = [ version: '1.0.5', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.5', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.5' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1396,9 +1121,7 @@ export const data = [ 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, - }, + integrations: { All: true }, page: { path: '/destinations/mixpanel', referrer: '', @@ -1440,9 +1163,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: { @@ -1454,12 +1175,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - additionalProp: 1, - }, - ], + metadata: [{ jobId: 1, additionalProp: 1, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -1512,9 +1228,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: { @@ -1527,12 +1241,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 2, - additionalProp: 2, - }, - ], + metadata: [{ jobId: 2, additionalProp: 2, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -1585,9 +1294,7 @@ export const data = [ 'Content-Type': 'application/json', Authorization: 'Basic dGVzdF9hcGlfc2VjcmV0Og==', }, - params: { - strict: 1, - }, + params: { strict: 1 }, body: { JSON: {}, JSON_ARRAY: { @@ -1601,18 +1308,9 @@ export const data = [ }, ], metadata: [ - { - jobId: 3, - additionalProp: 3, - }, - { - jobId: 4, - additionalProp: 4, - }, - { - jobId: 5, - additionalProp: 5, - }, + { jobId: 3, additionalProp: 3, userId: 'u1' }, + { jobId: 4, additionalProp: 4, userId: 'u1' }, + { jobId: 5, additionalProp: 5, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -1676,12 +1374,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 6, - additionalProp: 6, - }, - ], + metadata: [{ jobId: 6, additionalProp: 6, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -1690,11 +1383,7 @@ export const data = [ apiSecret: 'test_api_secret', token: 'test_api_token', prefixProperties: true, - groupKeySettings: [ - { - groupKey: 'company', - }, - ], + groupKeySettings: [{ groupKey: 'company' }], strictMode: true, useNativeSDK: false, }, @@ -1710,12 +1399,7 @@ export const data = [ }, }, { - metadata: [ - { - jobId: 7, - additionalProp: 7, - }, - ], + metadata: [{ jobId: 7, additionalProp: 7, userId: 'u1' }], batched: false, statusCode: 400, error: @@ -1735,11 +1419,7 @@ export const data = [ token: 'test_api_token', prefixProperties: true, useNativeSDK: false, - groupKeySettings: [ - { - groupKey: 'company', - }, - ], + groupKeySettings: [{ groupKey: 'company' }], strictMode: true, }, DestinationDefinition: { diff --git a/test/integrations/destinations/ometria/router/data.ts b/test/integrations/destinations/ometria/router/data.ts index ef15eea586..58f3a91d87 100644 --- a/test/integrations/destinations/ometria/router/data.ts +++ b/test/integrations/destinations/ometria/router/data.ts @@ -16,10 +16,7 @@ export const data = [ userId: 'userId1', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -53,10 +50,7 @@ export const data = [ field1: 'val1', ip: '0.0.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.2.1', - }, + 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', @@ -67,14 +61,10 @@ export const data = [ receivedAt: '2021-10-25T15:10:08.889+05:30', request_ip: '[::1]', anonymousId: '7138f7d9-5dd2-4337-805d-ca17be59dc8e', - integrations: { - Ometria: { - listingId: 'test1', - }, - }, + integrations: { Ometria: { listingId: 'test1' } }, originalTimestamp: '2021-10-25T09:40:08.879Z', }, - metadata: { jobId: 1 }, + metadata: { jobId: 1, userId: 'u1' }, destination: { ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', Name: 'ometria-dev', @@ -131,10 +121,7 @@ export const data = [ userId: 'userId1', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -168,10 +155,7 @@ export const data = [ field1: 'val1', ip: '0.0.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.2.1', - }, + 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', @@ -181,15 +165,10 @@ export const data = [ timestamp: '2021-10-25T15:10:08.888+05:30', receivedAt: '2021-10-25T15:10:08.889+05:30', request_ip: '[::1]', - integrations: { - Ometria: { - listingId: 'updatedId1', - allowMarketing: true, - }, - }, + integrations: { Ometria: { listingId: 'updatedId1', allowMarketing: true } }, originalTimestamp: '2021-10-25T09:40:08.879Z', }, - metadata: { jobId: 2 }, + metadata: { jobId: 2, userId: 'u1' }, destination: { ID: '1zzHtStW2ZPlullmz6L7DGnmk9V', Name: 'ometria-dev', @@ -255,9 +234,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://api.ometria.com/v2/push', - headers: { - 'X-Ometria-Auth': 'dummyApiKey', - }, + headers: { 'X-Ometria-Auth': 'dummyApiKey' }, params: {}, body: { JSON: {}, @@ -271,12 +248,8 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], batched: true, statusCode: 200, diff --git a/test/integrations/destinations/one_signal/router/data.ts b/test/integrations/destinations/one_signal/router/data.ts index 5f45d2e624..fe8460e45d 100644 --- a/test/integrations/destinations/one_signal/router/data.ts +++ b/test/integrations/destinations/one_signal/router/data.ts @@ -19,19 +19,14 @@ export const data = [ allowedProperties: [], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'identify', sentAt: '2021-01-03T17:02:53.195Z', userId: 'user@27', channel: 'web', context: { - os: { - name: '', - version: '1.12.3', - }, + os: { name: '', version: '1.12.3' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -46,18 +41,9 @@ export const data = [ userId: 'user@27', }, locale: 'en-US', - device: { - token: 'token', - id: 'id', - type: 'ios', - }, - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -75,34 +61,19 @@ export const data = [ emailDeviceType: false, smsDeviceType: false, eventAsTags: false, - allowedProperties: [ - { - propertyName: 'brand', - }, - { - propertyName: 'price', - }, - ], + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'add_to_Cart', type: 'track', sentAt: '2021-01-03T17:02:53.195Z', userId: 'user@27', channel: 'web', - properties: { - brand: 'Zara', - price: '12000', - }, + properties: { brand: 'Zara', price: '12000' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -110,13 +81,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -145,10 +111,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://onesignal.com/api/v1/players', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -180,10 +143,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://onesignal.com/api/v1/players', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -211,11 +171,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -233,32 +189,19 @@ export const data = [ body: { XML: {}, FORM: {}, - JSON: { - tags: { - brand: 'Zara', - price: '12000', - add_to_Cart: true, - }, - }, + JSON: { tags: { brand: 'Zara', price: '12000', add_to_Cart: true } }, JSON_ARRAY: {}, }, type: 'REST', files: {}, method: 'PUT', params: {}, - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, + headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://onesignal.com/api/v1/apps/random-818c-4a28-b98e-6cd8a994eb22/users/user@27', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -267,14 +210,7 @@ export const data = [ emailDeviceType: false, smsDeviceType: false, eventAsTags: false, - allowedProperties: [ - { - propertyName: 'brand', - }, - { - propertyName: 'price', - }, - ], + allowedProperties: [{ propertyName: 'brand' }, { propertyName: 'price' }], }, }, }, diff --git a/test/integrations/destinations/optimizely_fullstack/router/data.ts b/test/integrations/destinations/optimizely_fullstack/router/data.ts index 1803881f30..270ac6873e 100644 --- a/test/integrations/destinations/optimizely_fullstack/router/data.ts +++ b/test/integrations/destinations/optimizely_fullstack/router/data.ts @@ -18,11 +18,7 @@ export const data = [ channel: 'web', properties: {}, context: { - traits: { - organization: 'RudderStack', - fullName: 'John Doe', - country: 'US', - }, + traits: { organization: 'RudderStack', fullName: 'John Doe', country: 'US' }, sessionId: 1685626914716, }, rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', @@ -32,17 +28,11 @@ export const data = [ userId: 'userId123', integrations: { All: true, - optimizely_fullstack: { - variationId: 'test_variation_id_1', - }, + optimizely_fullstack: { variationId: 'test_variation_id_1' }, }, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -50,20 +40,12 @@ export const data = [ experimentId: 'test_experiment_id', trackKnownUsers: true, attributeMapping: [ - { - from: 'organization', - to: 'company', - }, - { - from: 'fullName', - to: 'name', - }, + { from: 'organization', to: 'company' }, + { from: 'fullName', to: 'name' }, ], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, }, { message: { @@ -72,34 +54,21 @@ export const data = [ userId: 'userId123', channel: 'web', context: { - traits: { - organization: 'RudderStack', - fullName: 'John Doe', - }, + traits: { organization: 'RudderStack', fullName: 'John Doe' }, sessionId: 1685626914716, }, rudderId: '5354b3f2-cb72-4355-a2b5-a298c3837c7d', messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', timestamp: '2023-02-10T12:16:07.251Z', - properties: { - foo: 'bar', - revenue: 123, - quantity: 2, - }, + properties: { foo: 'bar', revenue: 123, quantity: 2 }, anonymousId: '856365b8-da4b-4c13-9098-84df18559446', integrations: { All: true, - optimizely_fullstack: { - variationId: 'test_variation_id_2', - }, + optimizely_fullstack: { variationId: 'test_variation_id_2' }, }, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -108,30 +77,16 @@ export const data = [ trackKnownUsers: true, anonymizeIp: true, eventMapping: [ - { - from: 'Product Searched', - to: 'Searched', - }, - { - from: 'product_added', - to: 'Product Added', - }, + { from: 'Product Searched', to: 'Searched' }, + { from: 'product_added', to: 'Product Added' }, ], attributeMapping: [ - { - from: 'organization', - to: 'company', - }, - { - from: 'fullName', - to: 'name', - }, + { from: 'organization', to: 'company' }, + { from: 'fullName', to: 'name' }, ], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, }, { message: { @@ -139,33 +94,21 @@ export const data = [ userId: 'userId123', channel: 'web', context: { - traits: { - organization: 'RudderStack', - fullName: 'John Doe', - }, + traits: { organization: 'RudderStack', fullName: 'John Doe' }, sessionId: 1685626914716, }, rudderId: '5354b3f2-cb72-4355-a2b5-a298c3837c7d', messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', timestamp: '2023-02-10T12:16:07.251Z', - properties: { - foo: 'bar', - category: 'food', - }, + properties: { foo: 'bar', category: 'food' }, anonymousId: '856365b8-da4b-4c13-9098-84df18559446', integrations: { All: true, - optimizely_fullstack: { - variationId: 'test_variation_id_1', - }, + optimizely_fullstack: { variationId: 'test_variation_id_1' }, }, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -176,20 +119,12 @@ export const data = [ trackCategorizedPages: true, trackNamedPages: false, pageMapping: [ - { - from: 'meal', - to: 'Viewed Meal Page', - }, - { - from: 'food', - to: 'Product Added', - }, + { from: 'meal', to: 'Viewed Meal Page' }, + { from: 'food', to: 'Product Added' }, ], }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, }, { message: { @@ -201,19 +136,10 @@ export const data = [ rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', - integrations: { - All: true, - optimizely_fullstack: { - variationId: '123', - }, - }, + integrations: { All: true, optimizely_fullstack: { variationId: '123' } }, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -223,9 +149,7 @@ export const data = [ trackNamedPages: false, }, }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, }, ], destType: 'optimizely_fullstack', @@ -245,9 +169,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://logx.optimizely.com/v1/events', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -303,11 +225,7 @@ export const data = [ files: {}, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -315,22 +233,12 @@ export const data = [ experimentId: 'test_experiment_id', trackKnownUsers: true, attributeMapping: [ - { - from: 'organization', - to: 'company', - }, - { - from: 'fullName', - to: 'name', - }, + { from: 'organization', to: 'company' }, + { from: 'fullName', to: 'name' }, ], }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { @@ -340,9 +248,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://logx.optimizely.com/v1/events', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -379,9 +285,7 @@ export const data = [ uuid: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', quantity: 2, revenue: 12300, - tags: { - foo: 'bar', - }, + tags: { foo: 'bar' }, }, ], }, @@ -397,11 +301,7 @@ export const data = [ files: {}, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -410,32 +310,16 @@ export const data = [ trackKnownUsers: true, anonymizeIp: true, eventMapping: [ - { - from: 'Product Searched', - to: 'Searched', - }, - { - from: 'product_added', - to: 'Product Added', - }, + { from: 'Product Searched', to: 'Searched' }, + { from: 'product_added', to: 'Product Added' }, ], attributeMapping: [ - { - from: 'organization', - to: 'company', - }, - { - from: 'fullName', - to: 'name', - }, + { from: 'organization', to: 'company' }, + { from: 'fullName', to: 'name' }, ], }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, { @@ -445,9 +329,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://logx.optimizely.com/v1/events', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -468,10 +350,7 @@ export const data = [ key: 'Product Added', timestamp: 1676031367251, uuid: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', - tags: { - foo: 'bar', - category: 'food', - }, + tags: { foo: 'bar', category: 'food' }, }, ], }, @@ -487,11 +366,7 @@ export const data = [ files: {}, }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { dataFileUrl: 'https://cdn.optimizely.com/datafiles/abc.json', accountId: 'test_account_id', @@ -502,32 +377,18 @@ export const data = [ trackCategorizedPages: true, trackNamedPages: false, pageMapping: [ - { - from: 'meal', - to: 'Viewed Meal Page', - }, - { - from: 'food', - to: 'Product Added', - }, + { from: 'meal', to: 'Viewed Meal Page' }, + { from: 'food', to: 'Product Added' }, ], }, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, { batched: false, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { accountId: 'test_account_id', campaignId: 'test_campagin_id', @@ -539,11 +400,7 @@ export const data = [ }, error: "Both 'Track Categorized Pages' and 'Track Named Pages' toggles are disabled in webapp. Please enable at one of them to send page/screen events to Optimizely.", - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], statTags: { destType: 'OPTIMIZELY_FULLSTACK', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/ortto/processor/data.ts b/test/integrations/destinations/ortto/processor/data.ts index e7c71c7355..715262e447 100644 --- a/test/integrations/destinations/ortto/processor/data.ts +++ b/test/integrations/destinations/ortto/processor/data.ts @@ -1068,6 +1068,220 @@ export const data = [ }, }, }, + { + name: 'ortto', + description: 'Track call for updating activities with no phone provided', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'ORTTO', + Config: { + privateApiKey: 'dummyApiKey', + instanceRegion: 'other', + orttoEventsMapping: [ + { + rsEventName: 'RudderEvent', + orttoEventName: 'Ortto Event', + eventProperties: [ + { + rudderProperty: 'RudderProp', + orttoProperty: 'OrttoProp', + type: 'text', + }, + { + rudderProperty: 'RudderProp', + orttoProperty: 'OrttoProp', + type: 'longText', + }, + ], + }, + ], + orttoPersonAttributes: [ + { + rudderTraits: 'ruddertrait0', + orttoAttribute: 'ortto attirbute0', + type: 'email', + }, + { + rudderTraits: 'ruddertrait1', + orttoAttribute: 'ortto attirbute1', + type: 'email', + }, + ], + }, + Enabled: true, + Transformations: [], + }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2 }, + message: { + anonymousId: '8d872292709c6fbe', + channel: 'mobile', + context: { + app: { + build: '1', + name: 'AMTestProject', + namespace: 'com.rudderstack.android.rudderstack.sampleAndroidApp', + version: '1.0', + }, + device: { + id: '8d872292709c6fbe', + manufacturer: 'Google', + model: 'AOSPonIAEmulator', + name: 'generic_x86_arm', + type: 'android', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.2', + }, + 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: { + ruddertrait0: 'abc', + ruddertrait1: 'def', + address: { + city: 'Kolkata', + country: 'India', + postalcode: '700096', + state: 'West bengal', + street: 'Park Street', + }, + age: '30', + anonymousId: '8d872292709c6fbe', + birthday: '2020-05-26', + createDate: '18th March 2020', + description: 'Premium User for 3 years', + email: 'identify@test.com', + firstname: 'John', + gdpr: false, + userId: 'sample_user_id', + lastname: 'Sparrow', + name: 'John Sparrow', + id: 'sample_user_id', + username: 'john_sparrow', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + event: 'RudderEvent', + integrations: { + All: true, + }, + messageId: '1590431830915-73bed370-5889-436d-9a9e-0c0e0c809d06', + properties: { + revenue: '30', + RudderProp: 'USD', + quantity: '5', + test_key_2: { + test_child_key_1: 'test_child_value_1', + }, + price: '58.0', + }, + originalTimestamp: '2020-05-25T18:37:10.917Z', + type: 'track', + userId: 'sample_user_id', + }, + }, + ], + method: 'POST', + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.ap3api.com/v1/activities/create', + headers: { + 'X-Api-Key': 'dummyApiKey', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + activities: [ + { + fields: { + 'str::first': 'John', + 'str::last': 'Sparrow', + 'str::email': 'identify@test.com', + 'geo::city': { + name: 'Kolkata', + }, + 'geo::country': {}, + 'geo::region': {}, + 'dtz::b': { + day: 26, + month: 5, + year: 2020, + }, + 'str::postal': '700096', + 'str::language': 'en-US', + 'str::ei': 'sample_user_id', + 'bol::gdpr': false, + 'bol::p': false, + 'bol::sp': false, + 'str:cm:ortto-attirbute0': 'abc', + 'str:cm:ortto-attirbute1': 'def', + }, + activity_id: 'act:cm:ortto-event', + attributes: { + 'str:cm:orttoprop': 'USD', + 'txt:cm:orttoprop': 'USD', + }, + location: {}, + }, + ], + merge_by: ['str::ei', 'str::email'], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + metadata: { + destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + jobId: 2, + }, + statusCode: 200, + }, + ], + }, + }, + }, { name: 'ortto', description: 'Track call for updating activities', diff --git a/test/integrations/destinations/ortto/router/data.ts b/test/integrations/destinations/ortto/router/data.ts index 58a1dc3a5d..cf5731be80 100644 --- a/test/integrations/destinations/ortto/router/data.ts +++ b/test/integrations/destinations/ortto/router/data.ts @@ -55,7 +55,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 1 }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 1, userId: 'u1' }, message: { anonymousId: '8d872292709c6fbe', channel: 'mobile', @@ -176,7 +176,7 @@ export const data = [ Enabled: true, Transformations: [], }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2 }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2, userId: 'u1' }, message: { anonymousId: '8d872292709c6fbe', channel: 'mobile', @@ -327,6 +327,7 @@ export const data = [ { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 1, + userId: 'u1', }, ], batched: true, @@ -438,6 +439,7 @@ export const data = [ { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2, + userId: 'u1', }, ], batched: true, diff --git a/test/integrations/destinations/pagerduty/router/data.ts b/test/integrations/destinations/pagerduty/router/data.ts index 02fd53c629..87761656f9 100644 --- a/test/integrations/destinations/pagerduty/router/data.ts +++ b/test/integrations/destinations/pagerduty/router/data.ts @@ -18,10 +18,7 @@ export const data = [ userId: 'user@45', properties: { source: 'rudder-webapp', - customDetails: { - 'ping time': '1500ms', - 'load avg': 0.75, - }, + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, imageURLs: [ { src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', @@ -31,9 +28,7 @@ export const data = [ src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', alt: 'second image', }, - { - alt: 'third image', - }, + { alt: 'third image' }, ], linkURLs: [ { @@ -44,20 +39,12 @@ export const data = [ href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', text: 'Stack Overflow Error', }, - { - text: 'Destructure Error', - }, + { text: 'Destructure Error' }, ], }, - integrations: { - pagerduty: { - type: 'changeEvent', - }, - }, - }, - metadata: { - jobId: 1, + integrations: { pagerduty: { type: 'changeEvent' } }, }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac', @@ -80,10 +67,7 @@ export const data = [ source: 'rudder-webapp', group: 'destination', class: 'connection settings', - customDetails: { - 'ping time': '1500ms', - 'load avg': 0.75, - }, + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, imageURLs: [ { src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', @@ -93,9 +77,7 @@ export const data = [ src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', alt: 'second image', }, - { - alt: 'third image', - }, + { alt: 'third image' }, ], linkURLs: [ { @@ -106,15 +88,11 @@ export const data = [ href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', text: 'Stack Overflow Error', }, - { - text: 'Destructure Error', - }, + { text: 'Destructure Error' }, ], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac', @@ -138,10 +116,7 @@ export const data = [ source: 'rudder-webapp', group: 'destination', class: 'connection settings', - customDetails: { - 'ping time': '1500ms', - 'load avg': 0.75, - }, + customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, imageURLs: [ { src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', @@ -151,9 +126,7 @@ export const data = [ src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', alt: 'second image', }, - { - alt: 'third image', - }, + { alt: 'third image' }, ], linkURLs: [ { @@ -164,15 +137,11 @@ export const data = [ href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', text: 'Stack Overflow Error', }, - { - text: 'Destructure Error', - }, + { text: 'Destructure Error' }, ], }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac', @@ -221,10 +190,7 @@ export const data = [ payload: { source: 'rudder-webapp', summary: 'Github CI/CD Triggered', - custom_details: { - 'load avg': 0.75, - 'ping time': '1500ms', - }, + custom_details: { 'load avg': 0.75, 'ping time': '1500ms' }, }, routing_key: '9552b56325dc490bd0139be85f7b8fac', }, @@ -234,9 +200,7 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://events.pagerduty.com/v2/change/enqueue', }, @@ -246,7 +210,7 @@ export const data = [ dedupKeyFieldIdentifier: 'properties.dedupKey', }, }, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { @@ -266,9 +230,7 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://events.pagerduty.com/v2/enqueue', }, @@ -278,13 +240,13 @@ export const data = [ dedupKeyFieldIdentifier: 'properties.dedupKey', }, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, { batched: false, error: 'Events must be sent within ninety days of their occurrence', - metadata: [{ jobId: 3 }], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 400, statTags: { destType: 'PAGERDUTY', diff --git a/test/integrations/destinations/pardot/router/data.ts b/test/integrations/destinations/pardot/router/data.ts index 7c2a2a11e3..0862666bba 100644 --- a/test/integrations/destinations/pardot/router/data.ts +++ b/test/integrations/destinations/pardot/router/data.ts @@ -5,7 +5,7 @@ export const data = [ name: 'pardot', description: 'Test 0', feature: 'router', - module: 'destination', + module: MODULES.DESTINATION, version: 'v0', input: { request: { @@ -25,9 +25,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -58,10 +56,8 @@ export const data = [ }, metadata: { jobId: 1, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, message: { type: 'identify', @@ -70,10 +66,7 @@ export const data = [ userId: 'user12345', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -100,19 +93,11 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', - externalId: [ - { - type: 'pardotId', - id: 123435, - }, - ], + externalId: [{ type: 'pardotId', id: 123435 }], }, rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', @@ -121,9 +106,7 @@ export const data = [ receivedAt: '2021-11-15T14:06:42.497+05:30', request_ip: '[::1]', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-09-08T11:10:45.466Z', traits: { email: 'Roger12@waltair.io', @@ -149,9 +132,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -182,10 +163,8 @@ export const data = [ }, metadata: { jobId: 2, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, message: { type: 'identify', @@ -194,10 +173,7 @@ export const data = [ userId: 'user12345', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -224,10 +200,7 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', @@ -239,9 +212,7 @@ export const data = [ receivedAt: '2021-11-15T14:06:42.497+05:30', request_ip: '[::1]', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-09-08T11:10:45.466Z', traits: { email: 'Roger_12@waltair.io', @@ -267,9 +238,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -300,10 +269,8 @@ export const data = [ }, metadata: { jobId: 3, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, message: { type: 'identify', @@ -312,10 +279,7 @@ export const data = [ userId: 'user12345', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -342,19 +306,11 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', - externalId: [ - { - type: 'crmfid', - id: '00Q6r000002LKhTPVR', - }, - ], + externalId: [{ type: 'crmfid', id: '00Q6r000002LKhTPVR' }], }, rudderId: 'fa2994a5-2a81-45fd-9919-fcf5596ad380', messageId: 'e2d1a383-d9a2-4e03-a9dc-131d153c4d95', @@ -363,9 +319,7 @@ export const data = [ receivedAt: '2021-11-15T14:06:42.497+05:30', request_ip: '[::1]', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-09-08T11:10:45.466Z', traits: { email: 'nick_kyrgios@waltair.io', @@ -391,9 +345,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -424,10 +376,8 @@ export const data = [ }, metadata: { jobId: 4, - secret: { - access_token: 'myExpiredToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myExpiredToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, message: { type: 'identify', @@ -436,10 +386,7 @@ export const data = [ userId: 'user12345', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -466,10 +413,7 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', @@ -481,9 +425,7 @@ export const data = [ receivedAt: '2021-11-15T14:06:42.497+05:30', request_ip: '[::1]', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-09-08T11:10:45.466Z', traits: { email: 'rolex_waltair@mywebsite.io', @@ -509,9 +451,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -540,10 +480,7 @@ export const data = [ Name: 'test destination', Transformations: [], }, - metadata: { - jobId: 5, - secret: null, - }, + metadata: { jobId: 5, secret: null, userId: 'u1' }, message: { type: 'identify', event: 'navigated user', @@ -551,10 +488,7 @@ export const data = [ userId: 'user12345', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -581,10 +515,7 @@ export const data = [ innerHeight: 776, }, traits: {}, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.18', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.18' }, campaign: {}, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', @@ -596,9 +527,7 @@ export const data = [ receivedAt: '2021-11-15T14:06:42.497+05:30', request_ip: '[::1]', anonymousId: 'd8b2ed61-7fa5-4ef8-bd92-6a506157c0cf', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2021-09-08T11:10:45.466Z', traits: { email: 'rolex_waltair@mywebsite.io', @@ -649,10 +578,8 @@ export const data = [ metadata: [ { jobId: 1, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, ], batched: false, @@ -670,9 +597,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -731,10 +656,8 @@ export const data = [ metadata: [ { jobId: 2, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, ], batched: false, @@ -752,9 +675,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -813,10 +734,8 @@ export const data = [ metadata: [ { jobId: 3, - secret: { - access_token: 'myToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, ], batched: false, @@ -834,9 +753,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -895,10 +812,8 @@ export const data = [ metadata: [ { jobId: 4, - secret: { - access_token: 'myExpiredToken', - refresh_token: 'myRefreshToken', - }, + secret: { access_token: 'myExpiredToken', refresh_token: 'myRefreshToken' }, + userId: 'u1', }, ], batched: false, @@ -916,9 +831,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -962,9 +875,7 @@ export const data = [ name: 'PARDOT', displayName: 'Pardot', config: { - auth: { - type: 'OAuth', - }, + auth: { type: 'OAuth' }, transformAt: 'router', transformAtV1: 'router', saveDestinationResponse: true, @@ -993,12 +904,7 @@ export const data = [ Name: 'test destination', Transformations: [], }, - metadata: [ - { - jobId: 5, - secret: null, - }, - ], + metadata: [{ jobId: 5, secret: null, userId: 'u1' }], batched: false, statusCode: 500, error: 'OAuth - access token not found', @@ -1046,9 +952,7 @@ export const data = [ }, }, files: {}, - params: { - destination: 'pardot', - }, + params: { destination: 'pardot' }, }, method: 'POST', }, @@ -1062,10 +966,7 @@ export const data = [ status: 200, destinationResponse: { response: { - '@attributes': { - stat: 'ok', - version: 1, - }, + '@attributes': { stat: 'ok', version: 1 }, prospect: { id: 123435, campaign_id: 42213, @@ -1112,11 +1013,7 @@ export const data = [ 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', - }, + campaign: { id: 42113, name: 'Test', crm_fid: '7012y000000MNOCLL4' }, assigned_to: { user: { id: 38443703, @@ -1142,26 +1039,10 @@ export const data = [ 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', - }, + { 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, @@ -1207,9 +1088,7 @@ export const data = [ }, }, files: {}, - params: { - destination: 'pardot', - }, + params: { destination: 'pardot' }, }, method: 'POST', }, @@ -1223,10 +1102,7 @@ export const data = [ status: 201, destinationResponse: { response: { - '@attributes': { - stat: 'ok', - version: 1, - }, + '@attributes': { stat: 'ok', version: 1 }, prospect: { id: 123435, campaign_id: 42213, @@ -1273,11 +1149,7 @@ export const data = [ 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', - }, + campaign: { id: 42113, name: 'Test', crm_fid: '7012y000000MNOCLL4' }, assigned_to: { user: { id: 38443703, @@ -1303,26 +1175,10 @@ export const data = [ 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', - }, + { 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, @@ -1367,9 +1223,7 @@ export const data = [ }, }, files: {}, - params: { - destination: 'pardot', - }, + params: { destination: 'pardot' }, }, method: 'POST', }, @@ -1383,10 +1237,7 @@ export const data = [ status: 200, destinationResponse: { response: { - '@attributes': { - stat: 'ok', - version: 1, - }, + '@attributes': { stat: 'ok', version: 1 }, prospect: { id: 123435, campaign_id: 42213, @@ -1433,11 +1284,7 @@ export const data = [ 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', - }, + campaign: { id: 42113, name: 'Test', crm_fid: '7012y000000MNOCLL4' }, assigned_to: { user: { id: 38443703, @@ -1463,26 +1310,10 @@ export const data = [ 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', - }, + { 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, @@ -1528,9 +1359,7 @@ export const data = [ }, }, files: {}, - params: { - destination: 'pardot', - }, + params: { destination: 'pardot' }, }, method: 'POST', }, @@ -1545,11 +1374,7 @@ export const data = [ status: 500, authErrorCategory: 'REFRESH_TOKEN', destinationResponse: { - '@attributes': { - stat: 'fail', - version: 1, - err_code: 184, - }, + '@attributes': { stat: 'fail', version: 1, err_code: 184 }, err: 'access_token is invalid, unknown, or malformed: Inactive token', }, statTags: { @@ -1558,7 +1383,7 @@ export const data = [ destinationId: 'Non-determininable', workspaceId: 'Non-determininable', errorType: 'retryable', - feature: 'dataDelivery', + feature: FEATURES.DATA_DELIVERY, implementation: 'native', module: 'destination', }, diff --git a/test/integrations/destinations/persistiq/router/data.ts b/test/integrations/destinations/persistiq/router/data.ts index 051a8a4bca..ddb39b9028 100644 --- a/test/integrations/destinations/persistiq/router/data.ts +++ b/test/integrations/destinations/persistiq/router/data.ts @@ -26,33 +26,22 @@ export const data = [ Snippet: 'extra value', extra: 'extraVal', }, - externalId: [ - { - type: 'persistIqLeadId', - id: 'lel1c5u1wuk8', - }, - ], + externalId: [{ type: 'persistIqLeadId', id: 'lel1c5u1wuk8' }], }, traits: { linkedinUrl: 'www.google.com', dup: 'update', status: 'open', - company: { - name: 'abc123', - }, + company: { name: 'abc123' }, }, }, destination: { Config: { apiKey: 'dummyApiKey', - persistIqAttributesMapping: [ - { - from: 'useroccupation', - to: 'occupation', - }, - ], + persistIqAttributesMapping: [{ from: 'useroccupation', to: 'occupation' }], }, }, + metadata: { jobId: 1, userId: 'u1' }, }, ], destType: 'persistiq', @@ -102,7 +91,7 @@ export const data = [ persistIqAttributesMapping: [{ from: 'useroccupation', to: 'occupation' }], }, }, - metadata: [null], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, ], diff --git a/test/integrations/destinations/pinterest_tag/router/data.ts b/test/integrations/destinations/pinterest_tag/router/data.ts index e004be25f0..c02b1781e3 100644 --- a/test/integrations/destinations/pinterest_tag/router/data.ts +++ b/test/integrations/destinations/pinterest_tag/router/data.ts @@ -26,20 +26,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -81,14 +71,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 1, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 1, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -103,30 +88,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -150,20 +119,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -204,14 +163,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 2, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -226,30 +180,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -273,20 +211,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -308,14 +236,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 3, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 3, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -330,30 +253,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -377,20 +284,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -431,14 +328,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 4, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 4, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -453,30 +345,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -500,20 +376,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -554,14 +420,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 5, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -576,30 +437,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -623,20 +468,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -677,14 +512,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 6, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 6, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -699,30 +529,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -736,9 +550,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://ct.pinterest.com/events/v3', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -769,14 +581,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -786,10 +592,7 @@ export const data = [ }, files: {}, }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 7, - }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 7, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -804,30 +607,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -851,9 +638,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://ct.pinterest.com/events/v3', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -889,14 +674,8 @@ export const data = [ opt_out_type: 'LDP', content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -931,14 +710,8 @@ export const data = [ opt_out_type: 'LDP', content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -972,14 +745,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1012,12 +779,7 @@ export const data = [ order_id: '50314b8e9bcf000000000000', num_items: 2, content_ids: ['123'], - contents: [ - { - quantity: 2, - item_price: '25', - }, - ], + contents: [{ quantity: 2, item_price: '25' }], }, }, { @@ -1050,14 +812,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1091,14 +847,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1132,14 +882,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1152,30 +896,12 @@ export const data = [ files: {}, }, metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 1, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 2, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 3, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 4, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 6, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 7, - }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 1, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 2, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 3, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 4, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 6, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 7, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -1193,30 +919,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1224,12 +934,7 @@ export const data = [ }, }, { - metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - ], + metadata: [{ destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 5, userId: 'u1' }], statTags: { destType: 'PINTEREST_TAG', feature: 'router', @@ -1255,30 +960,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1317,20 +1006,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -1372,14 +1051,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 8, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 8, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -1396,30 +1070,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1443,20 +1101,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -1497,14 +1145,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 9, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 9, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -1521,30 +1164,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1568,20 +1195,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -1622,14 +1239,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 10, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 10, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -1647,30 +1259,14 @@ export const data = [ enhancedMatch: true, sendAsCustomEvent: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1732,14 +1328,8 @@ export const data = [ opt_out_type: 'LDP', content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1773,14 +1363,8 @@ export const data = [ opt_out_type: 'LDP', content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1813,14 +1397,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1853,14 +1431,8 @@ export const data = [ num_items: 3, content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, + { quantity: 1, item_price: '19' }, + { quantity: 2, item_price: '3' }, ], }, }, @@ -1873,18 +1445,9 @@ export const data = [ files: {}, }, metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 8, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 9, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 10, - }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 8, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 9, userId: 'u1' }, + { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 10, userId: 'u1' }, ], batched: true, statusCode: 200, @@ -1904,30 +1467,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'WatchVideo', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'WatchVideo' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -1966,20 +1513,10 @@ export const data = [ db: '19950715', lastname: 'Rudderlabs', firstName: 'Test', - address: { - city: 'Kolkata', - state: 'WB', - zip: '700114', - country: 'IN', - }, - }, - device: { - advertisingId: 'abc123', - }, - library: { - name: 'rudder-sdk-ruby-sync', - version: '1.0.6', + address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, }, + device: { advertisingId: 'abc123' }, + library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, }, messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', timestamp: '2020-08-14T05:30:30.118Z', @@ -2020,14 +1557,9 @@ export const data = [ checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', }, anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, + integrations: { All: true }, }, + metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 5, userId: 'u1' }, destination: { DestinationDefinition: { Config: { cdkV2Enabled: true } }, ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', @@ -2042,30 +1574,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'Watch Video', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'Watch Video' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, @@ -2084,12 +1600,7 @@ export const data = [ body: { output: [ { - metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - ], + metadata: [{ destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', jobId: 5, userId: 'u1' }], batched: false, statusCode: 400, error: 'message type identify is not supported', @@ -2115,30 +1626,14 @@ export const data = [ deduplicationKey: 'messageId', enhancedMatch: true, customProperties: [ - { - properties: 'presentclass', - }, - { - properties: 'presentgrade', - }, + { properties: 'presentclass' }, + { properties: 'presentgrade' }, ], eventsMapping: [ - { - from: 'ABC Searched', - to: 'Watch Video', - }, - { - from: 'ABC Searched', - to: 'Signup', - }, - { - from: 'User Signup', - to: 'Signup', - }, - { - from: 'User Created', - to: 'Signup', - }, + { from: 'ABC Searched', to: 'Watch Video' }, + { from: 'ABC Searched', to: 'Signup' }, + { from: 'User Signup', to: 'Signup' }, + { from: 'User Created', to: 'Signup' }, ], }, Enabled: true, diff --git a/test/integrations/destinations/pipedream/router/data.ts b/test/integrations/destinations/pipedream/router/data.ts index fa71e6a592..3e05ad9551 100644 --- a/test/integrations/destinations/pipedream/router/data.ts +++ b/test/integrations/destinations/pipedream/router/data.ts @@ -19,25 +19,15 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { additional_bet_index: 0, @@ -100,21 +90,13 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { pipedreamUrl: 'http://6b0e6a60.ngrok.io', headers: [ - { - from: '', - to: '', - }, - { - from: 'test2', - to: 'value2', - }, + { from: '', to: '' }, + { from: 'test2', to: 'value2' }, ], }, }, @@ -157,9 +139,7 @@ export const data = [ versionSessionCount: 2, game_name: 'FireEagleSlots', }, - integrations: { - All: true, - }, + integrations: { All: true }, event: 'spin_result', message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', @@ -172,18 +152,10 @@ export const data = [ }, traits: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, - }, - os: { - version: '8.1.0', - name: 'android', - }, - network: { - carrier: 'Banglalink', + address: { city: 'Dhaka', country: 'Bangladesh' }, }, + os: { version: '8.1.0', name: 'android' }, + network: { carrier: 'Banglalink' }, }, type: 'track', properties: { @@ -230,34 +202,21 @@ export const data = [ files: {}, endpoint: 'http://6b0e6a60.ngrok.io', userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - headers: { - 'content-type': 'application/json', - test2: 'value2', - }, + headers: { 'content-type': 'application/json', test2: 'value2' }, version: '1', params: {}, type: 'REST', method: 'POST', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { pipedreamUrl: 'http://6b0e6a60.ngrok.io', headers: [ - { - from: '', - to: '', - }, - { - from: 'test2', - to: 'value2', - }, + { from: '', to: '' }, + { from: 'test2', to: 'value2' }, ], }, }, @@ -287,25 +246,15 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { additional_bet_index: 0, @@ -368,14 +317,8 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, - destination: { - Config: { - pipedreamUrl: 'https://6b0e6a60.ngrok.io/n', - }, - }, + metadata: { jobId: 2, userId: 'u1' }, + destination: { Config: { pipedreamUrl: 'https://6b0e6a60.ngrok.io/n' } }, }, ], destType: 'pipedream', @@ -415,9 +358,7 @@ export const data = [ versionSessionCount: 2, game_name: 'FireEagleSlots', }, - integrations: { - All: true, - }, + integrations: { All: true }, event: 'spin_result', message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', @@ -430,18 +371,10 @@ export const data = [ }, traits: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, - }, - os: { - version: '8.1.0', - name: 'android', - }, - network: { - carrier: 'Banglalink', + address: { city: 'Dhaka', country: 'Bangladesh' }, }, + os: { version: '8.1.0', name: 'android' }, + network: { carrier: 'Banglalink' }, }, type: 'track', properties: { @@ -488,26 +421,16 @@ export const data = [ files: {}, endpoint: 'https://6b0e6a60.ngrok.io/n', userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - headers: { - 'content-type': 'application/json', - }, + headers: { 'content-type': 'application/json' }, version: '1', params: {}, type: 'REST', method: 'POST', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - pipedreamUrl: 'https://6b0e6a60.ngrok.io/n', - }, - }, + destination: { Config: { pipedreamUrl: 'https://6b0e6a60.ngrok.io/n' } }, }, ], }, diff --git a/test/integrations/destinations/posthog/router/data.ts b/test/integrations/destinations/posthog/router/data.ts index f69b4bfbdd..dab8ba8b1c 100644 --- a/test/integrations/destinations/posthog/router/data.ts +++ b/test/integrations/destinations/posthog/router/data.ts @@ -16,9 +16,7 @@ export const data = [ yourInstance: 'https://app.posthog.com/', }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'event-alias', context: { @@ -29,13 +27,8 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, app: { build: '1.0.0', name: 'RudderLabs JavaScript SDK', @@ -43,10 +36,7 @@ export const data = [ version: '1.1.7', }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, @@ -74,18 +64,13 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://app.posthog.com/batch', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { properties: { $set: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, $os: 'android', @@ -117,11 +102,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -148,13 +129,9 @@ export const data = [ input: [ { destination: { - Config: { - teamApiKey: 'K_HlByO3IE73-Tz4ch1LNDs0JGdwbknNGolFc4HdoAE', - }, - }, - metadata: { - jobId: 2, + Config: { teamApiKey: 'K_HlByO3IE73-Tz4ch1LNDs0JGdwbknNGolFc4HdoAE' }, }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', event: 'Product Brought', @@ -166,18 +143,10 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, @@ -241,9 +210,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://app.posthog.com/batch', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -252,10 +219,7 @@ export const data = [ messageId: 'e4408cb8-16dd-41e9-a313-a7a9cdc4bac5', properties: { $set: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, $os: 'android', @@ -316,17 +280,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - teamApiKey: 'K_HlByO3IE73-Tz4ch1LNDs0JGdwbknNGolFc4HdoAE', - }, + Config: { teamApiKey: 'K_HlByO3IE73-Tz4ch1LNDs0JGdwbknNGolFc4HdoAE' }, }, }, ], diff --git a/test/integrations/destinations/profitwell/router/data.ts b/test/integrations/destinations/profitwell/router/data.ts index 11f08c2139..b308155dae 100644 --- a/test/integrations/destinations/profitwell/router/data.ts +++ b/test/integrations/destinations/profitwell/router/data.ts @@ -10,14 +10,8 @@ export const data = [ body: { input: [ { - destination: { - Config: { - privateApiKey: '9270161a8e5abaa0e56efddfd9dbcb62', - }, - }, - metadata: { - jobId: 2, - }, + destination: { Config: { privateApiKey: '9270161a8e5abaa0e56efddfd9dbcb62' } }, + metadata: { jobId: 2, userId: 'u1' }, message: { channel: 'web', context: { @@ -92,18 +86,10 @@ export const data = [ version: '1', endpoint: 'https://api.profitwell.com/v2/subscriptions/', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, - destination: { - Config: { - privateApiKey: '9270161a8e5abaa0e56efddfd9dbcb62', - }, - }, + destination: { Config: { privateApiKey: '9270161a8e5abaa0e56efddfd9dbcb62' } }, }, ], }, diff --git a/test/integrations/destinations/reddit/router/data.ts b/test/integrations/destinations/reddit/router/data.ts index 317bb41a14..2f96e27ef7 100644 --- a/test/integrations/destinations/reddit/router/data.ts +++ b/test/integrations/destinations/reddit/router/data.ts @@ -12,9 +12,7 @@ export const data = [ { message: { context: { - traits: { - email: 'testone@gmail.com', - }, + traits: { email: 'testone@gmail.com' }, 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', ip: '54.100.200.255', @@ -57,38 +55,29 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { Config: { accountId: 'a2_fsddXXXfsfd', hashData: true, - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, metadata: { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 1, + userId: 'u1', }, }, { message: { context: { - traits: { - email: 'testone@gmail.com', - }, + traits: { email: 'testone@gmail.com' }, 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', ip: '54.100.200.255', @@ -122,38 +111,29 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { Config: { accountId: 'a2_fsddXXXfsfd', hashData: true, - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, metadata: { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 2, + userId: 'u1', }, }, { message: { context: { - traits: { - email: 'testone@gmail.com', - }, + traits: { email: 'testone@gmail.com' }, 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', ip: '54.100.200.255', @@ -177,30 +157,23 @@ export const data = [ url: 'https://www.website.com/product/path', image_url: 'https://www.website.com/product/path.webp', }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { Config: { accountId: 'a2_fsddXXXfsfd', hashData: true, - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, metadata: { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 3, + userId: 'u1', }, }, ], @@ -220,9 +193,7 @@ export const data = [ events: [ { event_at: '2019-10-14T09:03:17.562Z', - event_type: { - tracking_type: 'Purchase', - }, + event_type: { tracking_type: 'Purchase' }, user: { email: 'ac144532d9e4efeab19475d9253a879173ea12a3d2238d1cb8a332a7b3a105f2', external_id: @@ -236,24 +207,14 @@ export const data = [ event_metadata: { item_count: 3, products: [ - { - id: '123', - name: 'Monopoly', - category: 'Games', - }, - { - id: '345', - name: 'UNO', - category: 'Games', - }, + { id: '123', name: 'Monopoly', category: 'Games' }, + { id: '345', name: 'UNO', category: 'Games' }, ], }, }, { event_at: '2019-10-14T09:03:17.562Z', - event_type: { - tracking_type: 'ViewContent', - }, + event_type: { tracking_type: 'ViewContent' }, user: { email: 'ac144532d9e4efeab19475d9253a879173ea12a3d2238d1cb8a332a7b3a105f2', external_id: @@ -282,9 +243,7 @@ export const data = [ }, { event_at: '2019-10-14T09:03:17.562Z', - event_type: { - tracking_type: 'AddToCart', - }, + event_type: { tracking_type: 'AddToCart' }, user: { email: 'ac144532d9e4efeab19475d9253a879173ea12a3d2238d1cb8a332a7b3a105f2', external_id: @@ -327,23 +286,23 @@ export const data = [ { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 1, + userId: 'u1', }, { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 2, + userId: 'u1', }, { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 3, + userId: 'u1', }, ], batched: true, @@ -352,18 +311,9 @@ export const data = [ Config: { accountId: 'a2_fsddXXXfsfd', hashData: true, - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], - }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, }, ], @@ -384,9 +334,7 @@ export const data = [ { message: { context: { - traits: { - email: 'testone@gmail.com', - }, + traits: { email: 'testone@gmail.com' }, 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', ip: '54.100.200.255', @@ -419,29 +367,22 @@ export const data = [ }, ], }, - integrations: { - All: true, - }, + integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, destination: { Config: { accountId: 'a2_fsddXXXfsfd', - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, metadata: { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 1, + userId: 'u1', }, }, ], @@ -459,26 +400,17 @@ export const data = [ { destinationId: 'destId', workspaceId: 'wspId', - secret: { - accessToken: 'dummyAccessToken', - }, + secret: { accessToken: 'dummyAccessToken' }, + jobId: 1, + userId: 'u1', }, ], destination: { Config: { accountId: 'a2_fsddXXXfsfd', - eventsMapping: [ - { - from: 'Order Completed', - to: 'Purchase', - }, - ], - }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, + eventsMapping: [{ from: 'Order Completed', to: 'Purchase' }], }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, batched: false, statusCode: 400, diff --git a/test/integrations/destinations/refiner/router/data.ts b/test/integrations/destinations/refiner/router/data.ts index bea4d3ddcc..0ff75120d6 100644 --- a/test/integrations/destinations/refiner/router/data.ts +++ b/test/integrations/destinations/refiner/router/data.ts @@ -21,10 +21,7 @@ export const data = [ city: 'Banglore', email: 'test@user.com', phone: '7267286346802347827', - address: { - city: 'ahmedabad', - state: 'india', - }, + address: { city: 'ahmedabad', state: 'india' }, lastName: 'user', username: 'testUser', firstName: 'test', @@ -38,9 +35,7 @@ export const data = [ request_ip: '[::1]', originalTimestamp: '2022-10-11T13:10:54.877+05:30', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { apiKey: 'dummyApiKey', @@ -75,10 +70,7 @@ export const data = [ firstName: 'test', lastName: 'user', phone: '7267286346802347827', - userAddress: { - city: 'ahmedabad', - state: 'india', - }, + userAddress: { city: 'ahmedabad', state: 'india' }, userCountry: 'india', userId: 'user@45', username: 'testUser', @@ -109,7 +101,7 @@ export const data = [ whitelistedEvents: [{ eventName: '' }], }, }, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, ], @@ -161,10 +153,7 @@ export const data = [ firstName: 'test', userCountry: 'india', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.2', - }, + 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', }, @@ -176,30 +165,16 @@ export const data = [ currency: 'IND', order_id: '5241735', products: [ - { - id: 'product-bacon-jam', - category: 'Merch', - brand: '', - }, - { - id: 'product-t-shirt', - category: 'Merch', - brand: 'Levis', - }, - { - id: 'offer-t-shirt', - category: 'Merch', - brand: 'Levis', - }, + { id: 'product-bacon-jam', category: 'Merch', brand: '' }, + { id: 'product-t-shirt', category: 'Merch', brand: 'Levis' }, + { id: 'offer-t-shirt', category: 'Merch', brand: 'Levis' }, ], }, receivedAt: '2022-10-11T13:38:29.178+05:30', request_ip: '[::1]', originalTimestamp: '2022-10-11T13:38:31.827+05:30', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiKey: 'dummyApiKey', @@ -227,11 +202,7 @@ export const data = [ batched: false, batchedRequest: { body: { - FORM: { - email: 'test@user.com', - event: 'Product Searched', - id: 'user@45', - }, + FORM: { email: 'test@user.com', event: 'Product Searched', id: 'user@45' }, JSON: {}, JSON_ARRAY: {}, XML: {}, @@ -258,7 +229,7 @@ export const data = [ whitelistedEvents: [{ eventName: '' }], }, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, ], @@ -280,10 +251,7 @@ export const data = [ message: { type: 'group', sentAt: '2015-02-23T22:28:55.111Z', - traits: { - name: 'rudder ventures', - email: 'business@rudderstack.com', - }, + traits: { name: 'rudder ventures', email: 'business@rudderstack.com' }, userId: 'test@12', channel: 'browser', context: { @@ -297,9 +265,7 @@ export const data = [ integrations: { All: true }, originalTimestamp: '2022-10-11T13:51:00.906+05:30', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { accountAttributesMapping: [{ from: 'email', to: 'businessEmail' }], @@ -361,7 +327,7 @@ export const data = [ whitelistedEvents: [{ eventName: '' }], }, }, - metadata: [{ jobId: 3 }], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, ], diff --git a/test/integrations/destinations/rockerbox/router/data.ts b/test/integrations/destinations/rockerbox/router/data.ts index caa8f1ba08..af943d7e6b 100644 --- a/test/integrations/destinations/rockerbox/router/data.ts +++ b/test/integrations/destinations/rockerbox/router/data.ts @@ -14,46 +14,19 @@ export const data = [ Config: { advertiserId: 'test id', eventFilteringOption: 'disable', - whitelistedEvents: [ - { - eventName: '', - }, - ], - blacklistedEvents: [ - { - eventName: '', - }, - ], - eventsMap: [ - { - from: 'Product Added', - to: 'conv.add_to_cart', - }, - ], - useNativeSDK: { - web: false, - }, - clientAuthId: { - web: 'test-client-auth-id', - }, + whitelistedEvents: [{ eventName: '' }], + blacklistedEvents: [{ eventName: '' }], + eventsMap: [{ from: 'Product Added', to: 'conv.add_to_cart' }], + useNativeSDK: { web: false }, + clientAuthId: { web: 'test-client-auth-id' }, oneTrustCookieCategories: { - web: [ - { - oneTrustCookieCategory: 'Marketing Sample', - }, - ], - }, - customDomain: { - web: 'https://cookiedomain.com', - }, - enableCookieSync: { - web: true, + web: [{ oneTrustCookieCategory: 'Marketing Sample' }], }, + customDomain: { web: 'https://cookiedomain.com' }, + enableCookieSync: { web: true }, }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'track', event: 'Product Added', @@ -61,10 +34,7 @@ export const data = [ userId: 'userSampleX138', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, locale: 'en-IN', traits: { email: 'userSampleX120@gmail.com', @@ -84,9 +54,7 @@ export const data = [ product_name: 'Red T-shirt', }, anonymousId: '5f093403-1457-4a2c-b4e4-c61ec3bacf56', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2022-08-07T20:02:19.347Z', }, writeKey: '2D0yaayoBD7bp8uFomnBONdedcA', @@ -147,7 +115,7 @@ export const data = [ whitelistedEvents: [{ eventName: '' }], }, }, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, ], @@ -170,46 +138,19 @@ export const data = [ Config: { advertiserId: 'test id', eventFilteringOption: 'disable', - whitelistedEvents: [ - { - eventName: '', - }, - ], - blacklistedEvents: [ - { - eventName: '', - }, - ], - eventsMap: [ - { - from: 'Product Viewed', - to: 'conv.add_to_cart', - }, - ], - useNativeSDK: { - web: false, - }, - clientAuthId: { - web: 'test-client-auth-id', - }, + whitelistedEvents: [{ eventName: '' }], + blacklistedEvents: [{ eventName: '' }], + eventsMap: [{ from: 'Product Viewed', to: 'conv.add_to_cart' }], + useNativeSDK: { web: false }, + clientAuthId: { web: 'test-client-auth-id' }, oneTrustCookieCategories: { - web: [ - { - oneTrustCookieCategory: 'Marketing Sample', - }, - ], - }, - customDomain: { - web: 'https://cookiedomain.com', - }, - enableCookieSync: { - web: true, + web: [{ oneTrustCookieCategory: 'Marketing Sample' }], }, + customDomain: { web: 'https://cookiedomain.com' }, + enableCookieSync: { web: true }, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'track', event: 'Product Viewed', @@ -217,10 +158,7 @@ export const data = [ userId: 'userSampleX138', channel: 'web', context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, locale: 'en-IN', traits: { email: 'userSampleX120@gmail.com', @@ -240,9 +178,7 @@ export const data = [ product_name: 'Red T-shirt', }, anonymousId: '5f093403-1457-4a2c-b4e4-c61ec3bacf56', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2022-08-07T20:02:19.347Z', }, writeKey: '2D0yaayoBD7bp8uFomnBONdedcA', @@ -303,7 +239,7 @@ export const data = [ whitelistedEvents: [{ eventName: '' }], }, }, - metadata: [{ jobId: 2 }], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, ], diff --git a/test/integrations/destinations/salesforce/router/data.ts b/test/integrations/destinations/salesforce/router/data.ts index 8c36d3a785..4a37f7ed40 100644 --- a/test/integrations/destinations/salesforce/router/data.ts +++ b/test/integrations/destinations/salesforce/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'salesforce', description: 'Test 0', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -23,18 +21,10 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { anonymousId: '1e7673da-9473-49c6-97f7-da848ecafa76', company: 'Initech', @@ -54,9 +44,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'f19c35da-e9de-4c6e-b6e5-9e60cccc12c8', originalTimestamp: '2020-01-27T12:20:55.301Z', receivedAt: '2020-01-27T17:50:58.657+05:30', @@ -66,9 +54,7 @@ export const data = [ type: 'identify', userId: '1e7673da-9473-49c6-97f7-da848ecafa76', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { initialAccessToken: 'dummyInitialAccessToken', @@ -133,12 +119,7 @@ export const data = [ }, ], metadata: [ - { - destInfo: { - authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y', - }, - jobId: 1, - }, + { destInfo: { authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y' }, jobId: 1, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -167,7 +148,7 @@ export const data = [ { name: 'salesforce', description: 'Test 1', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -186,18 +167,10 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, traits: { anonymousId: '1e7673da-9473-49c6-97f7-da848ecafa76', company: 'Initech', @@ -217,9 +190,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'f19c35da-e9de-4c6e-b6e5-9e60cccc12c8', originalTimestamp: '2020-01-27T12:20:55.301Z', receivedAt: '2020-01-27T17:50:58.657+05:30', @@ -229,9 +200,7 @@ export const data = [ type: 'identify', userId: '1e7673da-9473-49c6-97f7-da848ecafa76', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { initialAccessToken: 'dummyInitialAccessToken', @@ -297,12 +266,7 @@ export const data = [ }, ], metadata: [ - { - destInfo: { - authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y', - }, - jobId: 2, - }, + { destInfo: { authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y' }, jobId: 2, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -331,7 +295,7 @@ export const data = [ { name: 'salesforce', description: 'Test 2', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -350,24 +314,14 @@ export const data = [ version: '1.0.0', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + 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.130 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, traits: { anonymousId: '1e7673da-9473-49c6-97f7-da848ecafa76', company: 'Initech', @@ -393,9 +347,7 @@ export const data = [ type: 'identify', userId: '1e7673da-9473-49c6-97f7-da848ecafa76', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { initialAccessToken: 'dummyInitialAccessToken', @@ -460,12 +412,7 @@ export const data = [ }, ], metadata: [ - { - destInfo: { - authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y', - }, - jobId: 3, - }, + { destInfo: { authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y' }, jobId: 3, userId: 'u1' }, ], batched: false, statusCode: 200, @@ -494,7 +441,7 @@ export const data = [ { name: 'salesforce', description: 'Test 3', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -535,9 +482,7 @@ export const data = [ files: {}, statusCode: 200, }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { initialAccessToken: 'dummyInitialAccessToken', @@ -601,12 +546,7 @@ export const data = [ statusCode: 200, }, metadata: [ - { - destInfo: { - authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y', - }, - jobId: 4, - }, + { destInfo: { authKey: '1WqFFH5esuVPnUgHkvEoYxDcX3y' }, jobId: 4, userId: 'u1' }, ], batched: false, statusCode: 200, diff --git a/test/integrations/destinations/sendgrid/router/data.ts b/test/integrations/destinations/sendgrid/router/data.ts index 6d79e556eb..e9ef671226 100644 --- a/test/integrations/destinations/sendgrid/router/data.ts +++ b/test/integrations/destinations/sendgrid/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'sendgrid', description: 'Router Test Case', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -35,9 +33,7 @@ export const data = [ clickTrackingEnableText: false, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { channel: 'web', context: { @@ -47,10 +43,7 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - 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', @@ -65,21 +58,9 @@ export const data = [ event: 'testing', properties: { personalizations: [ - { - to: [ - { - email: 'a@g.com', - }, - { - name: 'hello', - }, - ], - subject: 'hey there', - }, + { to: [{ email: 'a@g.com' }, { name: 'hello' }], subject: 'hey there' }, ], - from: { - email: 'ankit@rudderstack.com', - }, + from: { email: 'ankit@rudderstack.com' }, }, integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', @@ -103,19 +84,8 @@ export const data = [ FORM: {}, JSON_ARRAY: {}, JSON: { - personalizations: [ - { - to: [ - { - email: 'a@g.com', - }, - ], - subject: 'hey there', - }, - ], - from: { - email: 'ankit@rudderstack.com', - }, + personalizations: [{ to: [{ email: 'a@g.com' }], subject: 'hey there' }], + from: { email: 'ankit@rudderstack.com' }, reply_to: { email: 'ankit@rudderstack.com' }, subject: 'A sample subject', content: [ @@ -131,18 +101,11 @@ export const data = [ files: {}, method: 'POST', params: {}, - headers: { - Authorization: 'Bearer apikey', - 'Content-Type': 'application/json', - }, + headers: { Authorization: 'Bearer apikey', 'Content-Type': 'application/json' }, version: '1', endpoint: 'https://api.sendgrid.com/v3/mail/send', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -174,4 +137,974 @@ export const data = [ }, }, }, + { + name: 'sendgrid', + description: 'Identify call batching with multiple listIds', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@3', + type: 'identify', + context: { + traits: { + age: '30', + email: 'user3@rudderlabs.com', + phone: '+91 9876543210', + city: 'Ahmedabad', + state: 'Gujarat', + lastName: 'gupta', + firstName: 'aman', + name: 'aman gupta', + }, + externalId: [ + { + type: 'listIds', + id: ['476b736e-24a4-4089-8392-66a6bf6aa14d'], + }, + ], + }, + }, + metadata: { + jobId: 1, + }, + }, + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@4', + type: 'identify', + context: { + traits: { + email: 'user4@rudderlabs.com', + phone: '+91 9876543210', + userId: 'sajal', + city: 'Bombey', + state: 'Maharastra', + lastName: 'gupta', + username: 'suresh gupta', + firstName: 'suresh', + }, + externalId: [ + { + type: 'listIds', + id: '737ae8d4-25b4-496e-adff-2fded15fd0c6', + }, + ], + }, + }, + metadata: { + jobId: 2, + }, + }, + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@5', + type: 'identify', + context: { + traits: { + email: 'user5@rudderlabs.com', + phone: '+91 9876543210', + city: 'Banglore', + lastName: 'bhatt', + username: 'kiran bhatt', + firstName: 'kiran', + }, + externalId: [ + { + type: 'listIds', + id: [ + '737ae8d4-25b4-496e-adff-2fded15fd0c6', + 'a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1', + ], + }, + ], + }, + }, + metadata: { + jobId: 3, + }, + }, + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@6', + type: 'identify', + context: { + traits: { + email: 'user6@rudderlabs.com', + phone: '+91 9876543210', + city: 'Los Angeles', + lastName: 'doe', + name: 'john doe', + state: 'California', + firstName: 'john', + }, + externalId: [ + { + type: 'listIds', + id: [ + 'bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e', + 'cb7f13a1-b77b-4fb3-8440-56f6524716d3', + ], + }, + ], + }, + }, + metadata: { + jobId: 4, + }, + }, + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@7', + type: 'identify', + context: { + traits: { + email: 'user7@rudderlabs.com', + phone: '+91 9876543210', + city: 'Chicago', + lastName: 'patel', + name: 'reshma patel', + state: 'Illinois', + firstName: 'reshma', + }, + }, + }, + metadata: { + jobId: 5, + }, + }, + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + userId: 'user@8', + type: 'identify', + context: { + traits: { + email: 'user8@rudderlabs.com', + phone: '+91 9876543210', + city: 'Chicago', + lastName: 'patel', + name: 'karishma patel', + state: 'Illinois', + firstName: 'karishma', + }, + externalId: [ + { + type: 'listIds', + id: [ + '737ae8d4-25b4-496e-adff-2fded15fd0c6', + 'a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1', + 'bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e', + 'cb7f13a1-b77b-4fb3-8440-56f6524716d3', + ], + }, + ], + }, + }, + metadata: { + jobId: 6, + }, + }, + ], + destType: 'sendgrid', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + list_ids: ['476b736e-24a4-4089-8392-66a6bf6aa14d'], + contacts: [ + { + email: 'user3@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'aman', + last_name: 'gupta', + unique_name: 'aman gupta', + custom_fields: { w1_T: 'aman gupta' }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 1 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + list_ids: ['737ae8d4-25b4-496e-adff-2fded15fd0c6'], + contacts: [ + { + email: 'user4@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'suresh', + last_name: 'gupta', + custom_fields: {}, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 2 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + list_ids: [ + '737ae8d4-25b4-496e-adff-2fded15fd0c6', + 'a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1', + ], + contacts: [ + { + email: 'user5@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'kiran', + last_name: 'bhatt', + custom_fields: {}, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 3 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + list_ids: [ + 'bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e', + 'cb7f13a1-b77b-4fb3-8440-56f6524716d3', + ], + contacts: [ + { + email: 'user6@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'john', + last_name: 'doe', + unique_name: 'john doe', + custom_fields: { w1_T: 'john doe' }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 4 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + contacts: [ + { + email: 'user7@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'reshma', + last_name: 'patel', + unique_name: 'reshma patel', + custom_fields: { w1_T: 'reshma patel' }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 5 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + params: {}, + body: { + JSON: { + list_ids: [ + '737ae8d4-25b4-496e-adff-2fded15fd0c6', + 'a4ac8a69-d8cb-4cf1-9d85-3d60e4007ab1', + 'bc9b7ff4-f1d4-4c7c-b9a8-3051107c8d1e', + 'cb7f13a1-b77b-4fb3-8440-56f6524716d3', + ], + contacts: [ + { + email: 'user8@rudderlabs.com', + phone_number: '+91 9876543210', + first_name: 'karishma', + last_name: 'patel', + unique_name: 'karishma patel', + custom_fields: { w1_T: 'karishma patel' }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 6 }], + batched: true, + statusCode: 200, + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [{ from: 'name', to: 'user_name' }], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [{ event: 'open' }], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [{ groupId: '' }], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + }, + ], + }, + }, + }, + }, ]; diff --git a/test/integrations/destinations/sendinblue/router/data.ts b/test/integrations/destinations/sendinblue/router/data.ts index 31781e4c4f..ef96b3f55f 100644 --- a/test/integrations/destinations/sendinblue/router/data.ts +++ b/test/integrations/destinations/sendinblue/router/data.ts @@ -18,18 +18,8 @@ export const data = [ properties: { orderId: '1341394-3812392190', products: [ - { - product_id: 1234, - product_name: 'Track Pants', - amount: 1, - price: 220, - }, - { - product_id: 5768, - product_name: 'T-Shirt', - amount: 5, - price: 1058, - }, + { product_id: 1234, product_name: 'Track Pants', amount: 1, price: 220 }, + { product_id: 5768, product_name: 'T-Shirt', amount: 5, price: 1058 }, ], }, context: { @@ -48,20 +38,13 @@ export const data = [ anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', originalTimestamp: '2021-01-03T17:02:53.193Z', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { apiKey: 'apiKey123', clientKey: 'clientKey123', doi: false, - contactAttributeMapping: [ - { - from: 'location', - to: 'LOCATION', - }, - ], + contactAttributeMapping: [{ from: 'location', to: 'LOCATION' }], sendTraitsInTrack: true, }, }, @@ -72,14 +55,9 @@ export const data = [ sentAt: '2021-01-03T17:02:53.195Z', channel: 'web', name: 'New Page', - properties: { - url: 'https://www.google.com/', - title: 'Google home', - }, + properties: { url: 'https://www.google.com/', title: 'Google home' }, context: { - traits: { - email: 'john_doe@example.com', - }, + traits: { email: 'john_doe@example.com' }, page: { url: 'http://127.0.0.1:7307/Testing/test/ourSdk.html', path: '/Testing/test/ourSdk.html', @@ -97,9 +75,7 @@ export const data = [ anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', originalTimestamp: '2021-01-03T17:02:53.193Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiKey: 'apiKey123', @@ -125,39 +101,20 @@ export const data = [ newEmail: 'alex_root@example.com', role: 'SDE', }, - context: { - externalId: [ - { - type: 'sendinblueIncludeListIds', - id: [1, 2], - }, - ], - }, - integrations: { - All: true, - sendinblue: { - emailBlacklisted: true, - }, - }, + context: { externalId: [{ type: 'sendinblueIncludeListIds', id: [1, 2] }] }, + integrations: { All: true, sendinblue: { emailBlacklisted: true } }, 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', }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { apiKey: 'apiKey123', clientKey: 'clientKey123', doi: false, - contactAttributeMapping: [ - { - from: 'location', - to: 'LOCATION', - }, - ], + contactAttributeMapping: [{ from: 'location', to: 'LOCATION' }], }, }, }, @@ -181,9 +138,7 @@ export const data = [ anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', originalTimestamp: '2021-01-03T17:02:53.193Z', }, - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { apiKey: 'apiKey123', @@ -216,18 +171,8 @@ export const data = [ data: { orderId: '1341394-3812392190', products: [ - { - amount: 1, - price: 220, - product_id: 1234, - product_name: 'Track Pants', - }, - { - amount: 5, - price: 1058, - product_id: 5768, - product_name: 'T-Shirt', - }, + { amount: 1, price: 220, product_id: 1234, product_name: 'Track Pants' }, + { amount: 5, price: 1058, product_id: 5768, product_name: 'T-Shirt' }, ], }, id: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', @@ -246,10 +191,7 @@ export const data = [ }, endpoint: 'https://in-automate.sendinblue.com/api/v2/trackEvent', files: {}, - headers: { - 'Content-Type': 'application/json', - 'ma-key': 'clientKey123', - }, + headers: { 'Content-Type': 'application/json', 'ma-key': 'clientKey123' }, method: 'POST', params: {}, type: 'REST', @@ -259,21 +201,12 @@ export const data = [ Config: { apiKey: 'apiKey123', clientKey: 'clientKey123', - contactAttributeMapping: [ - { - from: 'location', - to: 'LOCATION', - }, - ], + contactAttributeMapping: [{ from: 'location', to: 'LOCATION' }], doi: false, sendTraitsInTrack: true, }, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { @@ -296,10 +229,7 @@ export const data = [ }, endpoint: 'https://in-automate.sendinblue.com/api/v2/trackPage', files: {}, - headers: { - 'Content-Type': 'application/json', - 'ma-key': 'clientKey123', - }, + headers: { 'Content-Type': 'application/json', 'ma-key': 'clientKey123' }, method: 'POST', params: {}, type: 'REST', @@ -314,11 +244,7 @@ export const data = [ templateId: 3, }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, { @@ -346,10 +272,7 @@ export const data = [ }, endpoint: 'https://api.sendinblue.com/v3/contacts', files: {}, - headers: { - 'Content-Type': 'application/json', - 'api-key': 'apiKey123', - }, + headers: { 'Content-Type': 'application/json', 'api-key': 'apiKey123' }, method: 'POST', params: {}, type: 'REST', @@ -359,30 +282,17 @@ export const data = [ Config: { apiKey: 'apiKey123', clientKey: 'clientKey123', - contactAttributeMapping: [ - { - from: 'location', - to: 'LOCATION', - }, - ], + contactAttributeMapping: [{ from: 'location', to: 'LOCATION' }], doi: false, }, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, { batched: false, error: 'sendinblueIncludeListIds is required to create a contact using DOI', - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], statTags: { destType: 'SENDINBLUE', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/serenytics/router/data.ts b/test/integrations/destinations/serenytics/router/data.ts index 2edbe58257..1e0226eab0 100644 --- a/test/integrations/destinations/serenytics/router/data.ts +++ b/test/integrations/destinations/serenytics/router/data.ts @@ -26,24 +26,15 @@ export const data = [ 'https://api.serenytics.com/api/data_source/5dc8508e-0946-47fc-8ed8-f67307c407f1/push/997877c6358621beb1f86dc320ac822b9f069760', }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { event: 'New Alert', type: 'track', sentAt: '2021-01-03T17:02:53.195Z', channel: 'web', - properties: { - message: 'Please check the alert', - brand: 'Zara', - price: '12000', - }, + properties: { message: 'Please check the alert', brand: 'Zara', price: '12000' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -51,13 +42,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -108,11 +94,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -178,24 +160,15 @@ export const data = [ ], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'Order Completed', type: 'track', sentAt: '2021-01-03T17:02:53.195Z', channel: 'web', - properties: { - message: 'Please check the alert', - brand: 'Zara', - price: '12000', - }, + properties: { message: 'Please check the alert', brand: 'Zara', price: '12000' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -203,13 +176,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -312,11 +280,7 @@ export const data = [ files: {}, }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -396,9 +360,7 @@ export const data = [ ], }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { messageId: 'ec5481b6-a926-4d2e-b293-0b3a77c4d3be', originalTimestamp: '2022-06-22T10:57:58Z', @@ -419,18 +381,10 @@ export const data = [ type: 'ios', attTrackingStatus: 3, }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, locale: 'en-US', - os: { - name: 'iOS', - version: '14.4.1', - }, - screen: { - density: 2, - }, + os: { name: 'iOS', version: '14.4.1' }, + screen: { density: 2 }, }, traits: { email: 'testuser@google.com', @@ -485,11 +439,7 @@ export const data = [ endpoint: 'https://api.serenytics.com/api/data_source/5dc8508e-0946-47fc-8ed8-f67307c407f1/push/997877c6358621beb1f86dc320ac822b9f069760', }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/sfmc/network.ts b/test/integrations/destinations/sfmc/network.ts new file mode 100644 index 0000000000..7564d8c6d5 --- /dev/null +++ b/test/integrations/destinations/sfmc/network.ts @@ -0,0 +1,14 @@ +export const networkCallsData = [ + { + httpReq: { + url: 'https://vcn7AQ2W9GGIAZSsN6Mfq.auth.marketingcloudapis.com/v2/token', + method: 'POST', + }, + httpRes: { + status: 200, + data: { + access_token: 'yourAuthToken', + }, + }, + }, +]; diff --git a/test/integrations/destinations/sfmc/processor/data.ts b/test/integrations/destinations/sfmc/processor/data.ts new file mode 100644 index 0000000000..406ed82ace --- /dev/null +++ b/test/integrations/destinations/sfmc/processor/data.ts @@ -0,0 +1,1735 @@ +export const data = [ + { + name: 'sfmc', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: true, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Creating or updating contacts is disabled. To enable this feature set "Do Not Create or Update Contacts" to false', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'POST', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + attributeSets: [], + contactKey: '12345', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'PUT', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + values: { + 'Contact Key': '12345', + 'App Name': 'RudderLabs JavaScript SDK', + 'App Version': '1.0.0', + 'App Build': '1.0.0', + 'UTM Campaign': 'Demo Campaign', + 'UTM Source': 'facebook', + 'UTM Medium': 'online', + 'UTM Term': 'Demo terms', + 'UTM Content': 'Demo content', + Locale: 'en-GB', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'IP Address': '0.0.0.0', + 'Screen Density': 2, + 'Screen Height': 860, + 'Screen Width': 1280, + Email: 'tonmoy@rudderstack.com', + Name: 'Tonmoy Labs', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Either userId or email is required', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + userId: 12345, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type is required', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'revenue', + userId: 12345, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type revenue is not supported', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + device: { + adTrackingEnabled: true, + type: 'iOS', + manufacturer: 'Apple', + model: 'iPhone XR', + name: 'Apple iPhone XR', + }, + network: { + bluetooth: 'off', + wifi: 'connceted', + cellular: 'active', + carrier: 'Verizon', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'POST', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + attributeSets: [], + contactKey: '12345', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'PUT', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + values: { + Name: 'Tonmoy Labs', + Email: 'tonmoy@rudderstack.com', + Locale: 'en-GB', + 'App Name': 'RudderLabs JavaScript SDK', + 'UTM Term': 'Demo terms', + 'App Build': '1.0.0', + 'IP Address': '0.0.0.0', + 'UTM Medium': 'online', + 'UTM Source': 'facebook', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'App Version': '1.0.0', + 'Contact Key': '12345', + 'Device Name': 'Apple iPhone XR', + 'Device Type': 'iOS', + 'UTM Content': 'Demo content', + 'Device-model': 'iPhone XR', + 'Screen Width': 1280, + 'UTM Campaign': 'Demo Campaign', + 'Wifi Enabled': 'connceted', + 'Screen Height': 860, + 'Screen Density': 2, + 'Network Carrier': 'Verizon', + 'Cellular Enabled': 'active', + 'Bluetooth Enabled': 'off', + 'Ad Tracking Enabled': true, + 'Device Manufacturer': 'Apple', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Event Name', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + properties: { + Plan: 'plan value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'Contact Key', + }, + ], + eventToUUID: [ + { + event: '', + uuid: false, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Contact Key:12345', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + values: { + Plan: 'plan value', + Locale: 'en-GB', + 'App Name': 'RudderLabs JavaScript SDK', + 'UTM Term': 'Demo terms', + 'App Build': '1.0.0', + 'IP Address': '0.0.0.0', + 'UTM Medium': 'online', + 'UTM Source': 'facebook', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'App Version': '1.0.0', + 'Contact Key': '12345', + 'UTM Content': 'Demo content', + 'Screen Width': 1280, + 'UTM Campaign': 'Demo Campaign', + 'Screen Height': 860, + 'Screen Density': 2, + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 7', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Event Name', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + device: { + adTrackingEnabled: true, + type: 'iOS', + manufacturer: 'Apple', + model: 'iPhone XR', + name: 'Apple iPhone XR', + }, + network: { + bluetooth: 'off', + wifi: 'connceted', + cellular: 'active', + carrier: 'Verizon', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + properties: { + Plan: 'plan value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'Contact Key', + }, + ], + eventToUUID: [ + { + event: 'Event Name', + uuid: true, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + values: { + Plan: 'plan value', + Uuid: '50360b9c-ea8d-409c-b672-c9230f91cce5', + Locale: 'en-GB', + 'App Name': 'RudderLabs JavaScript SDK', + 'UTM Term': 'Demo terms', + 'App Build': '1.0.0', + 'IP Address': '0.0.0.0', + 'UTM Medium': 'online', + 'UTM Source': 'facebook', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'App Version': '1.0.0', + 'Device Name': 'Apple iPhone XR', + 'Device Type': 'iOS', + 'UTM Content': 'Demo content', + 'Device-model': 'iPhone XR', + 'Screen Width': 1280, + 'UTM Campaign': 'Demo Campaign', + 'Wifi Enabled': 'connceted', + 'Screen Height': 860, + 'Screen Density': 2, + 'Network Carrier': 'Verizon', + 'Cellular Enabled': 'active', + 'Bluetooth Enabled': 'off', + 'Ad Tracking Enabled': true, + 'Device Manufacturer': 'Apple', + }, + }, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + version: '1', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Uuid:50360b9c-ea8d-409c-b672-c9230f91cce5', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 8', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Purchase Event', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + device: { + adTrackingEnabled: true, + type: 'iOS', + manufacturer: 'Apple', + model: 'iPhone XR', + name: 'Apple iPhone XR', + }, + network: { + bluetooth: 'off', + wifi: 'connceted', + cellular: 'active', + carrier: 'Verizon', + }, + traits: { + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + properties: { + Plan: 'plan value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'Contact Key', + }, + ], + eventToUUID: [ + { + event: 'Event Name', + uuid: true, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event not mapped for this track call', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 9', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Event Name', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + device: { + adTrackingEnabled: true, + type: 'iOS', + manufacturer: 'Apple', + model: 'iPhone XR', + name: 'Apple iPhone XR', + }, + network: { + bluetooth: 'off', + wifi: 'connceted', + cellular: 'active', + carrier: 'Verizon', + }, + traits: { + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + properties: { + Plan: 'plan value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'Contact Key', + }, + ], + eventToUUID: [ + { + event: 'Event Name', + uuid: true, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Either userId or email is required', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 10', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Watch', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + properties: { + Plan: 'plan value', + 'Price Key': 29.99, + 'Guest Key': '2323-34343-3434', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + { + from: 'Watch', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'User Key', + }, + { + from: 'watch', + to: 'Guest Key', + }, + ], + eventToUUID: [ + { + event: 'Event Name', + uuid: true, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + values: { + Plan: 'plan value', + Locale: 'en-GB', + 'App Name': 'RudderLabs JavaScript SDK', + 'UTM Term': 'Demo terms', + 'App Build': '1.0.0', + 'Price Key': 29.99, + 'Guest Key': '2323-34343-3434', + 'IP Address': '0.0.0.0', + 'UTM Medium': 'online', + 'UTM Source': 'facebook', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'App Version': '1.0.0', + 'UTM Content': 'Demo content', + 'Screen Width': 1280, + 'UTM Campaign': 'Demo Campaign', + 'Screen Height': 860, + 'Screen Density': 2, + }, + }, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + version: '1', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Guest Key:2323-34343-3434', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'Test 11', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + event: 'Watch', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'track', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + properties: { + Plan: 'plan value', + 'Price Key': 29.99, + 'Contact Key': 12345, + 'Guest Key': '2323-34343-3434', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToExternalKey: [ + { + from: 'Event Name', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + { + from: 'Watch', + to: 'C500FD37-155C-49BD-A21B-AFCEF3D1A9CB', + }, + ], + eventToPrimaryKey: [ + { + from: 'userId', + to: 'User Key', + }, + { + from: 'watch', + to: 'Guest Key, Contact Key', + }, + ], + eventToUUID: [ + { + event: 'Event Name', + uuid: true, + }, + ], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + JSON: { + values: { + Plan: 'plan value', + Locale: 'en-GB', + 'App Name': 'RudderLabs JavaScript SDK', + 'UTM Term': 'Demo terms', + 'App Build': '1.0.0', + 'Price Key': 29.99, + 'Contact Key': 12345, + 'Guest Key': '2323-34343-3434', + 'IP Address': '0.0.0.0', + 'UTM Medium': 'online', + 'UTM Source': 'facebook', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'App Version': '1.0.0', + 'UTM Content': 'Demo content', + 'Screen Width': 1280, + 'UTM Campaign': 'Demo Campaign', + 'Screen Height': 860, + 'Screen Density': 2, + }, + }, + }, + type: 'REST', + files: {}, + method: 'PUT', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + version: '1', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:C500FD37-155C-49BD-A21B-AFCEF3D1A9CB/rows/Guest Key:2323-34343-3434,Contact Key:12345', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/sfmc/router/data.ts b/test/integrations/destinations/sfmc/router/data.ts new file mode 100644 index 0000000000..7707e709f4 --- /dev/null +++ b/test/integrations/destinations/sfmc/router/data.ts @@ -0,0 +1,338 @@ +export const data = [ + { + name: 'sfmc', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + metadata: { + jobId: 1, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: true, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + { + message: { + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + campaign: { + name: 'Demo Campaign', + source: 'facebook', + medium: 'online', + term: 'Demo terms', + content: 'Demo content', + }, + traits: { + email: 'tonmoy@rudderstack.com', + name: 'Tonmoy Labs', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + screen: { + density: 2, + height: 860, + width: 1280, + }, + }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + userId: '12345', + userProperties: { + test_key: 'test value', + }, + sentAt: '2019-10-14T09:03:22.563Z', + integrations: { + All: true, + }, + }, + metadata: { + jobId: 2, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + destType: 'sfmc', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + metadata: [ + { + jobId: 1, + }, + ], + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: true, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: true, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + batched: false, + statusCode: 400, + error: + 'Creating or updating contacts is disabled. To enable this feature set "Do Not Create or Update Contacts" to false', + statTags: { + destType: 'SFMC', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/contacts/v1/contacts', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + attributeSets: [], + contactKey: '12345', + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:f3ffa19b-e0b3-4967-829f-549b781080e6/rows/Contact Key:12345', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer yourAuthToken', + }, + params: {}, + body: { + JSON: { + values: { + 'Contact Key': '12345', + 'App Name': 'RudderLabs JavaScript SDK', + 'App Version': '1.0.0', + 'App Build': '1.0.0', + 'UTM Campaign': 'Demo Campaign', + 'UTM Source': 'facebook', + 'UTM Medium': 'online', + 'UTM Term': 'Demo terms', + 'UTM Content': 'Demo content', + Locale: 'en-GB', + 'User Agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'IP Address': '0.0.0.0', + 'Screen Density': 2, + 'Screen Height': 860, + 'Screen Width': 1280, + Email: 'tonmoy@rudderstack.com', + Name: 'Tonmoy Labs', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + DestinationDefinition: { + ID: '1pYpYSeQd8OeN6xPdw6VGDzqUd1', + Name: 'SFMC', + DisplayName: 'Salesforce Marketing Cloud', + Config: { + destConfig: [], + excludeKeys: [], + includeKeys: [], + saveDestinationResponse: false, + supportedSourceTypes: [], + transformAt: 'processor', + }, + ResponseRules: {}, + }, + Config: { + clientId: 'vcn7AQ2W9GGIAZSsN6Mfq', + clientSecret: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + eventDelivery: true, + eventDeliveryTS: 1615371070621, + eventToUUID: [], + externalKey: 'f3ffa19b-e0b3-4967-829f-549b781080e6', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + }, + Enabled: true, + Transformations: [], + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/signl4/router/data.ts b/test/integrations/destinations/signl4/router/data.ts index 582c02e26d..0fcf55d046 100644 --- a/test/integrations/destinations/signl4/router/data.ts +++ b/test/integrations/destinations/signl4/router/data.ts @@ -27,24 +27,15 @@ export const data = [ eventToTitleMapping: [], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { event: 'New Alert', type: 'track', sentAt: '2021-01-03T17:02:53.195Z', channel: 'web', - properties: { - message: 'Please check the alert', - brand: 'Zara', - price: '12000', - }, + properties: { message: 'Please check the alert', brand: 'Zara', price: '12000' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -52,13 +43,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -86,9 +72,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://connect.signl4.com/webhook/dummyApiKey', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -108,11 +92,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -163,32 +143,18 @@ export const data = [ s4StatusValue: 'new', s4StatusProperty: '', s4Filter: false, - eventToTitleMapping: [ - { - from: 'New Alert', - to: 'Alert Created', - }, - ], + eventToTitleMapping: [{ from: 'New Alert', to: 'Alert Created' }], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { event: 'New Alert', type: 'identify', sentAt: '2021-01-03T17:02:53.195Z', channel: 'web', - properties: { - message: 'Please check the alert', - brand: 'Zara', - price: '12000', - }, + properties: { message: 'Please check the alert', brand: 'Zara', price: '12000' }, context: { - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, app: { name: 'RudderLabs JavaScript SDK', build: '1.0.0', @@ -196,13 +162,8 @@ export const data = [ namespace: 'com.rudderlabs.javascript', }, locale: 'en-US', - screen: { - density: 2, - }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.11', - }, + 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', @@ -239,19 +200,10 @@ export const data = [ s4StatusValue: 'new', s4StatusProperty: '', s4Filter: false, - eventToTitleMapping: [ - { - from: 'New Alert', - to: 'Alert Created', - }, - ], + eventToTitleMapping: [{ from: 'New Alert', to: 'Alert Created' }], }, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { errorCategory: 'dataValidation', destType: 'SIGNL4', diff --git a/test/integrations/destinations/singular/router/data.ts b/test/integrations/destinations/singular/router/data.ts index d9c9f7a8cb..9074ef2fdc 100644 --- a/test/integrations/destinations/singular/router/data.ts +++ b/test/integrations/destinations/singular/router/data.ts @@ -14,21 +14,13 @@ export const data = [ Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'track', event: 'mysessionevent', @@ -52,32 +44,17 @@ export const data = [ adTrackingEnabled: 'true', token: 'testDeviceToken', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '0.1.4', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, locale: 'en-US', - network: { - carrier: 'Android', - bluetooth: false, - cellular: true, - wifi: true, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, campaign: { source: 'google', medium: 'medium', term: 'keyword', content: 'some content', }, - os: { - name: 'Android', - version: '9', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Mumbai', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', @@ -93,7 +70,7 @@ export const data = [ receipt_signature: '1234dfghnh', referring_application: '2134dfg', total: 20, - revenue: 15.0, + revenue: 15, shipping: 22, tax: 1, discount: 1.5, @@ -112,13 +89,7 @@ export const data = [ url: 'https://www.website.com/product/path', image_url: 'https://www.website.com/product/path.jpg', }, - { - sku: 'F-32', - name: 'UNO', - price: 3.45, - quantity: 2, - category: 'Games', - }, + { sku: 'F-32', name: 'UNO', price: 3.45, quantity: 2, category: 'Games' }, ], }, timestamp: '2021-09-01T15:46:51.000Z', @@ -171,34 +142,19 @@ export const data = [ c: 'wifi', a: 'dummyApiKey', }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, @@ -223,21 +179,13 @@ export const data = [ Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'track', event: 'mysessionevent', @@ -261,32 +209,17 @@ export const data = [ adTrackingEnabled: 'true', token: 'testDeviceToken', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '0.1.4', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, locale: 'en-US', - network: { - carrier: 'Android', - bluetooth: false, - cellular: true, - wifi: true, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, campaign: { source: 'google', medium: 'medium', term: 'keyword', content: 'some content', }, - os: { - name: 'Android', - version: '9', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Mumbai', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', @@ -302,7 +235,7 @@ export const data = [ receipt_signature: '1234dfghnh', referring_application: '2134dfg', total: 20, - revenue: 15.0, + revenue: 15, shipping: 22, tax: 1, discount: 1.5, @@ -321,13 +254,7 @@ export const data = [ url: 'https://www.website.com/product/path', image_url: 'https://www.website.com/product/path.jpg', }, - { - sku: 'F-32', - name: 'UNO', - price: 3.45, - quantity: 2, - category: 'Games', - }, + { sku: 'F-32', name: 'UNO', price: 3.45, quantity: 2, category: 'Games' }, ], }, timestamp: '2021-09-01T15:46:51.000Z', @@ -380,34 +307,19 @@ export const data = [ c: 'wifi', a: 'dummyApiKey', }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, @@ -432,21 +344,13 @@ export const data = [ Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { type: 'track', event: 'mysessionevent', @@ -470,32 +374,17 @@ export const data = [ adTrackingEnabled: 'true', token: 'testDeviceToken', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '0.1.4', - }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, locale: 'en-US', - network: { - carrier: 'Android', - bluetooth: false, - cellular: true, - wifi: true, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, campaign: { source: 'google', medium: 'medium', term: 'keyword', content: 'some content', }, - os: { - name: 'Android', - version: '9', - }, - screen: { - density: 420, - height: 1794, - width: 1080, - }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Mumbai', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', @@ -511,7 +400,7 @@ export const data = [ receipt_signature: '1234dfghnh', referring_application: '2134dfg', total: 20, - revenue: 15.0, + revenue: 15, shipping: 22, tax: 1, discount: 1.5, @@ -530,13 +419,7 @@ export const data = [ url: 'https://www.website.com/product/path', image_url: 'https://www.website.com/product/path.jpg', }, - { - sku: 'F-32', - name: 'UNO', - price: 3.45, - quantity: 2, - category: 'Games', - }, + { sku: 'F-32', name: 'UNO', price: 3.45, quantity: 2, category: 'Games' }, ], }, timestamp: '2021-09-01T15:46:51.000Z', @@ -589,34 +472,19 @@ export const data = [ c: 'wifi', a: 'dummyApiKey', }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { apiKey: 'dummyApiKey', sessionEventList: [ - { - sessionEventName: 'mysessionevent', - }, - { - sessionEventName: 'randomuser', - }, - { - sessionEventName: 'titanium', - }, + { sessionEventName: 'mysessionevent' }, + { sessionEventName: 'randomuser' }, + { sessionEventName: 'titanium' }, ], }, }, @@ -644,15 +512,8 @@ export const data = [ userId: '68e214f1-ac84-4241-b27d-78a18f59f21e', channel: 'mobile', context: { - os: { - name: 'iOS', - version: '16.2', - }, - app: { - build: '5013', - version: '0.5.13', - namespace: 'com.yabimoney', - }, + os: { name: 'iOS', version: '16.2' }, + app: { build: '5013', version: '0.5.13', namespace: 'com.yabimoney' }, device: { id: 'cc06ff5e-838b-4e33-9d90-4ab5a6068bec', name: 'iPhone', @@ -664,11 +525,7 @@ export const data = [ attTrackingStatus: 0, }, locale: 'en-AE', - screen: { - width: 844, - height: 390, - density: 3, - }, + screen: { width: 844, height: 390, density: 3 }, traits: { phone: '', userId: '68e214f1-ac84-4241-b27d-78a18f59f21e', @@ -677,15 +534,8 @@ export const data = [ yabi_user_id: 'uCh5IS8p', subscription_type: '', }, - library: { - name: 'rudder-ios-library', - version: '1.8.0', - }, - network: { - wifi: true, - carrier: 'etisalat', - cellular: false, - }, + library: { name: 'rudder-ios-library', version: '1.8.0' }, + network: { wifi: true, carrier: 'etisalat', cellular: false }, timezone: 'Asia/Dubai', sessionId: 1674138119, }, @@ -695,9 +545,7 @@ export const data = [ receivedAt: '2023-01-19T14:25:25.465Z', request_ip: '87.201.98.151', anonymousId: 'cc06ff5e-838b-4e33-9d90-4ab5a6068bec', - integrations: { - All: true, - }, + integrations: { All: true }, originalTimestamp: '2023-01-19T14:25:06.301Z', }, destination: { @@ -705,29 +553,14 @@ export const data = [ Config: { apiKey: 'apiKey', apiSecret: 'dummyApiSecret', - sessionEventList: [ - { - sessionEventName: 'test_event', - }, - ], - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + sessionEventList: [{ sessionEventName: 'test_event' }], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], eventFilteringOption: 'whitelistedEvents', eventDelivery: false, eventDeliveryTS: 1663919255086, }, - liveEventsConfig: { - eventDelivery: false, - eventDeliveryTS: 1663919255086, - }, + liveEventsConfig: { eventDelivery: false, eventDeliveryTS: 1663919255086 }, ID: '2EhlBrBduwN2NX4pJ7nrVDHAz6C', workspaceId: '1sUXvPs0hYgjBxSfjG4gqnRFNoP', DestinationDefinition: { @@ -821,6 +654,7 @@ export const data = [ eventType: 'track', sourceDefinitionId: '1TW48i2bIzEl1HPf825cEznfIM8', destinationDefinitionId: '', + userId: 'u1', }, }, ], @@ -856,12 +690,7 @@ export const data = [ a: 'apiKey', e: {}, }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, + body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, files: {}, }, metadata: [ @@ -895,6 +724,7 @@ export const data = [ eventType: 'track', sourceDefinitionId: '1TW48i2bIzEl1HPf825cEznfIM8', destinationDefinitionId: '', + userId: 'u1', }, ], batched: false, @@ -904,29 +734,14 @@ export const data = [ Config: { apiKey: 'apiKey', apiSecret: 'dummyApiSecret', - sessionEventList: [ - { - sessionEventName: 'test_event', - }, - ], - blacklistedEvents: [ - { - eventName: '', - }, - ], - whitelistedEvents: [ - { - eventName: '', - }, - ], + sessionEventList: [{ sessionEventName: 'test_event' }], + blacklistedEvents: [{ eventName: '' }], + whitelistedEvents: [{ eventName: '' }], eventFilteringOption: 'whitelistedEvents', eventDelivery: false, eventDeliveryTS: 1663919255086, }, - liveEventsConfig: { - eventDelivery: false, - eventDeliveryTS: 1663919255086, - }, + liveEventsConfig: { eventDelivery: false, eventDeliveryTS: 1663919255086 }, ID: '2EhlBrBduwN2NX4pJ7nrVDHAz6C', workspaceId: '1sUXvPs0hYgjBxSfjG4gqnRFNoP', DestinationDefinition: { diff --git a/test/integrations/destinations/slack/processor/data.ts b/test/integrations/destinations/slack/processor/data.ts index be05a13ab5..7deb555fa9 100644 --- a/test/integrations/destinations/slack/processor/data.ts +++ b/test/integrations/destinations/slack/processor/data.ts @@ -1,1982 +1,2020 @@ export const data = [ - { - "name": "slack", - "description": "Test 0", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "integrations": { - "All": true - }, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "originalTimestamp": "2020-03-23T03:46:30.916Z", - "properties": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "receivedAt": "2020-03-23T09:16:31.041+05:30", - "request_ip": "[::1]:52056", - "sentAt": "2020-03-23T03:46:30.916Z", - "timestamp": "2020-03-23T09:16:31.041+05:30", - "type": "identify", - "userId": "12345" - }, - "metadata": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 126, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"Identified my-namehiji: hulala \",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 126, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 1", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "integrations": { - "All": true - }, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "originalTimestamp": "2020-03-23T03:46:30.916Z", - "properties": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "receivedAt": "2020-03-23T09:16:31.041+05:30", - "request_ip": "[::1]:52056", - "sentAt": "2020-03-23T03:46:30.916Z", - "timestamp": "2020-03-23T09:16:31.041+05:30", - "type": "page", - "userId": "12345" - }, - "metadata": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 126, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "metadata": { - "anonymousId": "4de817fb-7f8e-4e23-b9be-f6736dbda20f", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 126, - "messageId": "9ecc0183-89ed-48bd-87eb-b2d8e1ca6780", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 400, - "error": "Event type page is not supported", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "SLACK", - "module": "destination", - "implementation": "native", - "feature": "processor", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL" - } - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 2", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "12345", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "", - "referrer": "", - "search": "", - "title": "", - "url": "" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "traits": { - "country": "USA", - "email": "test@domain.com", - "hiji": "hulala-1", - "name": "my-name-1" - }, - "integrations": { - "All": true - }, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "originalTimestamp": "2020-03-23T03:41:46.122Z", - "receivedAt": "2020-03-23T09:11:46.244+05:30", - "request_ip": "[::1]:52055", - "sentAt": "2020-03-23T03:41:46.123Z", - "timestamp": "2020-03-23T09:11:46.243+05:30", - "type": "identify", - "userId": "12345" - }, - "metadata": { - "anonymousId": "12345", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 123, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"identified my-name-1 with hiji: hulala-1 \",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "12345", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 123, - "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 3", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "incomingWebhooksType": "modern", - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/demo", - "eventName": "is", - "eventRegex": true - }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_isent1", - "integrations": { - "All": true - }, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "originalTimestamp": "2020-03-23T03:46:30.921Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52057", - "sentAt": "2020-03-23T03:46:30.921Z", - "timestamp": "2020-03-23T09:16:31.064+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/id1/id2/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 4", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "incomingWebhooksType": "modern", - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", - "eventName": "is", - "eventChannel": "example_channel", - "eventRegex": true - }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventName": "is", - "eventChannel": "example_channel", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_eventing_testis", - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/id1/id2/example", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 5", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "incomingWebhooksType": "modern", - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", - "eventName": "test_eventing_test", - "eventChannel": "example_channel", - "eventRegex": false - }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventName": "", - "eventChannel": "example_channel", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_eventing_test", - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/id1/id2/example", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"my-name did test_eventing_test\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 6", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "incomingWebhooksType": "legacy", - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/demo", - "eventName": "is", - "eventRegex": true - }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_isent1", - "integrations": { - "All": true - }, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "originalTimestamp": "2020-03-23T03:46:30.921Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52057", - "sentAt": "2020-03-23T03:46:30.921Z", - "timestamp": "2020-03-23T09:16:31.064+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 7", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "incomingWebhooksType": "legacy", - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", - "eventName": "is", - "eventRegex": true - }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventChannel": "example-of-legacy", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ], - "denyListOfEvents": [ - { - "eventName": "black_event" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_eventing_testis", - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"channel\":\"example-of-legacy\",\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 8", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_eventing_testis", - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 400, - "error": "Event type is required", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "SLACK", - "module": "destination", - "implementation": "native", - "feature": "processor", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL" - } - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 9", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 400, - "error": "Event name is required", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "SLACK", - "module": "destination", - "implementation": "native", - "feature": "processor", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL" - } - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 10", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "identifyTemplate": "identified {{name}} with {{traits}}", - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": { - "app": { - "build": "1.0.0", - "name": "RudderLabs JavaScript SDK", - "namespace": "com.rudderlabs.javascript", - "version": "1.1.1-rc.1" - }, - "ip": "0.0.0.0", - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "1.1.1-rc.1" - }, - "locale": "en-US", - "os": { - "name": "", - "version": "" - }, - "page": { - "path": "/tests/html/script-test.html", - "referrer": "http://localhost:1111/tests/html/", - "search": "", - "title": "", - "url": "http://localhost:1111/tests/html/script-test.html" - }, - "screen": { - "density": 1.7999999523162842 - }, - "traits": { - "country": "India", - "email": "name@domain.com", - "hiji": "hulala", - "name": "my-name" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" - }, - "event": "test_isent1", - "integrations": { - "All": true - }, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "originalTimestamp": "2020-03-23T03:46:30.921Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52057", - "sentAt": "2020-03-23T03:46:30.921Z", - "timestamp": "2020-03-23T09:16:31.064+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 128, - "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 400, - "error": "Something is wrong with the event template: '{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}'", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "configuration", - "destType": "SLACK", - "module": "destination", - "implementation": "native", - "feature": "processor", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL" - } - } - ] - } - } - }, - { - "name": "slack", - "description": "Test 11", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "ID": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "Name": "test-slack", - "DestinationDefinition": { - "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", - "Name": "SLACK", - "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } - }, - "Config": { - "eventChannelSettings": [ - { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", - "eventName": "is", - "eventRegex": true - } - ], - "eventTemplateSettings": [ - { - "eventName": "is", - "eventRegex": true, - "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}" - }, - { - "eventName": "", - "eventRegex": false, - "eventTemplate": "" - } - ], - "webhookUrl": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "whitelistedTraitsSettings": [ - { - "trait": "hiji" - }, - { - "trait": "" - } - ] - }, - "Enabled": true, - "Transformations": [], - "IsProcessorEnabled": true - }, - "message": { - "anonymousId": "00000000000000000000000000", - "channel": "web", - "context": {}, - "event": "black_event", - "integrations": { - "All": true - }, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "originalTimestamp": "2020-03-23T03:46:30.922Z", - "properties": { - "currency": "USD", - "key1": "test_val1", - "key2": "test_val2", - "revenue": 30, - "user_actual_id": 12345 - }, - "receivedAt": "2020-03-23T09:16:31.064+05:30", - "request_ip": "[::1]:52054", - "sentAt": "2020-03-23T03:46:30.923Z", - "timestamp": "2020-03-23T09:16:31.063+05:30", - "type": "track", - "userId": "12345" - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "payload": "{\"text\":\"User 12345 did black_event\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - "metadata": { - "anonymousId": "00000000000000000000000000", - "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", - "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", - "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" - }, - "statusCode": 200 - } - ] - } - } - } -] \ No newline at end of file + { + name: 'slack', + description: + 'Test 0-> Identify -> Default template with some whiteListed traits and some of them are with a space in between', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: 'favorite color', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + 'favorite color': 'black', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + integrations: { + All: true, + }, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + originalTimestamp: '2020-03-23T03:46:30.916Z', + properties: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + receivedAt: '2020-03-23T09:16:31.041+05:30', + request_ip: '[::1]:52056', + sentAt: '2020-03-23T03:46:30.916Z', + timestamp: '2020-03-23T09:16:31.041+05:30', + type: 'identify', + userId: '12345', + }, + metadata: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 126, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"Identified my-namehiji: hulala favorite color: black ","username":"RudderStack","icon_url":"https://cdn.rudderlabs.com/rudderstack.png"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 126, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 1-> Unsupported event type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + integrations: { + All: true, + }, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + originalTimestamp: '2020-03-23T03:46:30.916Z', + properties: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + receivedAt: '2020-03-23T09:16:31.041+05:30', + request_ip: '[::1]:52056', + sentAt: '2020-03-23T03:46:30.916Z', + timestamp: '2020-03-23T09:16:31.041+05:30', + type: 'page', + userId: '12345', + }, + metadata: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 126, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + anonymousId: '4de817fb-7f8e-4e23-b9be-f6736dbda20f', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 126, + messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 400, + error: 'Event type page is not supported', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'SLACK', + module: 'destination', + implementation: 'native', + feature: 'processor', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + }, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 2 -> Identify call with custom template', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '12345', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '', + referrer: '', + search: '', + title: '', + url: '', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + traits: { + country: 'USA', + email: 'test@domain.com', + hiji: 'hulala-1', + name: 'my-name-1', + }, + integrations: { + All: true, + }, + messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', + originalTimestamp: '2020-03-23T03:41:46.122Z', + receivedAt: '2020-03-23T09:11:46.244+05:30', + request_ip: '[::1]:52055', + sentAt: '2020-03-23T03:41:46.123Z', + timestamp: '2020-03-23T09:11:46.243+05:30', + type: 'identify', + userId: '12345', + }, + metadata: { + anonymousId: '12345', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 123, + messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"identified my-name-1 with hiji: hulala-1 ","username":"RudderStack","icon_url":"https://cdn.rudderlabs.com/rudderstack.png"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '12345', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 123, + messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 3 -> Track with modern webhook and with custom template including a trait', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + incomingWebhooksType: 'modern', + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/demo', + eventName: 'is', + eventRegex: true, + }, + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example+1', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_isent1', + integrations: { + All: true, + }, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + originalTimestamp: '2020-03-23T03:46:30.921Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52057', + sentAt: '2020-03-23T03:46:30.921Z', + timestamp: '2020-03-23T09:16:31.064+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/id1/id2/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"my-name performed test_isent1 with test_val1 test_val2 and traits hulala"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: + 'Test 4 -> Track call with custom template with no trait and only properties and modern webhook', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + incomingWebhooksType: 'modern', + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example', + eventName: 'is', + eventChannel: 'example_channel', + eventRegex: true, + }, + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example+1', + eventName: 'is', + eventChannel: 'example_channel', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_eventing_testis', + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/id1/id2/example', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"my-name performed test_eventing_testis with test_val1 test_val2"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: + 'Test 5 -> Track call with default template and an extra empty event to template mapping containg blank string as event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + incomingWebhooksType: 'modern', + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example', + eventName: 'test_eventing_test', + eventChannel: 'example_channel', + eventRegex: false, + }, + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example+1', + eventName: '', + eventChannel: 'example_channel', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_eventing_test', + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/id1/id2/example', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: '{"text":"my-name did test_eventing_test"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: + 'Test 6 -> Track call with legacy webhook and custom template with properties and traits', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + incomingWebhooksType: 'legacy', + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/demo', + eventName: 'is', + eventRegex: true, + }, + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example+1', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_isent1', + integrations: { + All: true, + }, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + originalTimestamp: '2020-03-23T03:46:30.921Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52057', + sentAt: '2020-03-23T03:46:30.921Z', + timestamp: '2020-03-23T09:16:31.064+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"my-name performed test_isent1 with test_val1 test_val2 and traits hulala","username":"RudderStack","icon_url":"https://cdn.rudderlabs.com/rudderstack.png"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: + 'Test 7 -> Track call with legacy webhook and custom template with properties and custom channel from mapping', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + incomingWebhooksType: 'legacy', + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example', + eventName: 'is', + eventRegex: true, + }, + { + eventChannelWebhook: 'https://hooks.slack.com/services/id1/id2/example+1', + eventChannel: 'example-of-legacy', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + denyListOfEvents: [ + { + eventName: 'black_event', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_eventing_testis', + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"channel":"example-of-legacy","text":"my-name performed test_eventing_testis with test_val1 test_val2","username":"RudderStack","icon_url":"https://cdn.rudderlabs.com/rudderstack.png"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 8 -> No Event Type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_eventing_testis', + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 400, + error: 'Event type is required', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'SLACK', + module: 'destination', + implementation: 'native', + feature: 'processor', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + }, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 9 -> Track call with no Event name', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 400, + error: 'Event name is required', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'SLACK', + module: 'destination', + implementation: 'native', + feature: 'processor', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + }, + }, + ], + }, + }, + }, + { + name: 'slack', + description: + 'Test 10-> Track call with custom template but template is wrong ( space in `{{properties. key1}}` )', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + identifyTemplate: 'identified {{name}} with {{traits}}', + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.1.1-rc.1', + }, + ip: '0.0.0.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.1.1-rc.1', + }, + locale: 'en-US', + os: { + name: '', + version: '', + }, + page: { + path: '/tests/html/script-test.html', + referrer: 'http://localhost:1111/tests/html/', + search: '', + title: '', + url: 'http://localhost:1111/tests/html/script-test.html', + }, + screen: { + density: 1.7999999523162842, + }, + traits: { + country: 'India', + email: 'name@domain.com', + hiji: 'hulala', + name: 'my-name', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + }, + event: 'test_isent1', + integrations: { + All: true, + }, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + originalTimestamp: '2020-03-23T03:46:30.921Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52057', + sentAt: '2020-03-23T03:46:30.921Z', + timestamp: '2020-03-23T09:16:31.064+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 128, + messageId: '78102118-56ac-4c5a-a495-8cd7c8f71cc2', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 400, + error: + "Something is wrong with the event template: '{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}'", + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'SLACK', + module: 'destination', + implementation: 'native', + feature: 'processor', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + }, + }, + ], + }, + }, + }, + { + name: 'slack', + description: 'Test 11 -> Track call with default template', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + Name: 'test-slack', + DestinationDefinition: { + ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', + Name: 'SLACK', + DisplayName: 'Slack', + Config: { + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + eventChannelSettings: [ + { + eventChannelWebhook: 'https://hooks.slack.com/services/example/test/demo', + eventName: 'is', + eventRegex: true, + }, + ], + eventTemplateSettings: [ + { + eventName: 'is', + eventRegex: true, + eventTemplate: + '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', + }, + { + eventName: '', + eventRegex: false, + eventTemplate: '', + }, + ], + webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + whitelistedTraitsSettings: [ + { + trait: 'hiji', + }, + { + trait: '', + }, + ], + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + message: { + anonymousId: '00000000000000000000000000', + channel: 'web', + context: {}, + event: 'black_event', + integrations: { + All: true, + }, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + originalTimestamp: '2020-03-23T03:46:30.922Z', + properties: { + currency: 'USD', + key1: 'test_val1', + key2: 'test_val2', + revenue: 30, + user_actual_id: 12345, + }, + receivedAt: '2020-03-23T09:16:31.064+05:30', + request_ip: '[::1]:52054', + sentAt: '2020-03-23T03:46:30.923Z', + timestamp: '2020-03-23T09:16:31.063+05:30', + type: 'track', + userId: '12345', + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + payload: + '{"text":"User 12345 did black_event","username":"RudderStack","icon_url":"https://cdn.rudderlabs.com/rudderstack.png"}', + }, + }, + files: {}, + userId: '12345', + statusCode: 200, + }, + metadata: { + anonymousId: '00000000000000000000000000', + destinationId: '1ZQVSU9SXNg6KYgZALaqjAO3PIL', + destinationType: 'SLACK', + jobId: 129, + messageId: '8b8d5937-09bc-49dc-a35e-8cd6370575f8', + sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/slack/router/data.ts b/test/integrations/destinations/slack/router/data.ts index 87b1fe3b22..349b1a486f 100644 --- a/test/integrations/destinations/slack/router/data.ts +++ b/test/integrations/destinations/slack/router/data.ts @@ -17,28 +17,13 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'SLACK', DisplayName: 'Slack', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [ - { - eventChannel: '#slack_integration', - eventName: 'is', - eventRegex: true, - }, - { - eventChannel: '', - eventName: '', - eventRegex: false, - }, - { - eventChannel: '', - eventName: '', - eventRegex: false, - }, + { eventChannel: '#slack_integration', eventName: 'is', eventRegex: true }, + { eventChannel: '', eventName: '', eventRegex: false }, + { eventChannel: '', eventName: '', eventRegex: false }, ], eventTemplateSettings: [ { @@ -47,22 +32,11 @@ export const data = [ eventTemplate: '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', }, - { - eventName: '', - eventRegex: false, - eventTemplate: '', - }, + { eventName: '', eventRegex: false, eventTemplate: '' }, ], identifyTemplate: 'identified {{name}} with {{traits}}', webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', - whitelistedTraitsSettings: [ - { - trait: 'hiji', - }, - { - trait: '', - }, - ], + whitelistedTraitsSettings: [{ trait: 'hiji' }, { trait: '' }], }, Enabled: true, Transformations: [], @@ -78,15 +52,9 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.1-rc.1', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.1-rc.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.1-rc.1' }, locale: 'en-US', - os: { - name: '', - version: '', - }, + os: { name: '', version: '' }, page: { path: '/tests/html/script-test.html', referrer: 'http://localhost:1111/tests/html/', @@ -94,9 +62,7 @@ export const data = [ title: '', url: 'http://localhost:1111/tests/html/script-test.html', }, - screen: { - density: 1.7999999523162842, - }, + screen: { density: 1.7999999523162842 }, traits: { country: 'India', email: 'name@domain.com', @@ -106,9 +72,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', originalTimestamp: '2020-03-23T03:46:30.916Z', properties: { @@ -132,6 +96,7 @@ export const data = [ jobId: 126, messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, ], @@ -187,6 +152,7 @@ export const data = [ jobId: 126, messageId: '9ecc0183-89ed-48bd-87eb-b2d8e1ca6780', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], statTags: { @@ -223,28 +189,13 @@ export const data = [ ID: '1ZQUiJVMlmF7lfsdfXg7KXQnlLV', Name: 'SLACK', DisplayName: 'Slack', - Config: { - excludeKeys: [], - includeKeys: [], - }, + Config: { excludeKeys: [], includeKeys: [] }, }, Config: { eventChannelSettings: [ - { - eventChannel: '#slack_integration', - eventName: 'is', - eventRegex: true, - }, - { - eventChannel: '', - eventName: '', - eventRegex: false, - }, - { - eventChannel: '', - eventName: '', - eventRegex: false, - }, + { eventChannel: '#slack_integration', eventName: 'is', eventRegex: true }, + { eventChannel: '', eventName: '', eventRegex: false }, + { eventChannel: '', eventName: '', eventRegex: false }, ], eventTemplateSettings: [ { @@ -253,22 +204,11 @@ export const data = [ eventTemplate: '{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}}', }, - { - eventName: '', - eventRegex: false, - eventTemplate: '', - }, + { eventName: '', eventRegex: false, eventTemplate: '' }, ], identifyTemplate: 'identified {{name}} with {{traits}}', webhookUrl: 'https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo', - whitelistedTraitsSettings: [ - { - trait: 'hiji', - }, - { - trait: '', - }, - ], + whitelistedTraitsSettings: [{ trait: 'hiji' }, { trait: '' }], }, Enabled: true, Transformations: [], @@ -284,25 +224,11 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.1.1-rc.1', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.1-rc.1', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.1-rc.1' }, locale: 'en-US', - os: { - name: '', - version: '', - }, - page: { - path: '', - referrer: '', - search: '', - title: '', - url: '', - }, - screen: { - density: 1.7999999523162842, - }, + os: { name: '', version: '' }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, + screen: { density: 1.7999999523162842 }, traits: { country: 'India', email: 'name@domain.com', @@ -318,9 +244,7 @@ export const data = [ hiji: 'hulala-1', name: 'my-name-1', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', originalTimestamp: '2020-03-23T03:41:46.122Z', receivedAt: '2020-03-23T09:11:46.244+05:30', @@ -337,6 +261,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, }, ], @@ -413,6 +338,7 @@ export const data = [ jobId: 123, messageId: '4aaecff2-a513-4bbf-9824-c471f4ac9777', sourceId: '1YhwKyDcKstudlGxkeN5p2wgsrp', + userId: 'u1', }, ], statusCode: 200, diff --git a/test/integrations/destinations/snapchat_conversion/router/data.ts b/test/integrations/destinations/snapchat_conversion/router/data.ts index bfa9acd4d2..685ed2e5b4 100644 --- a/test/integrations/destinations/snapchat_conversion/router/data.ts +++ b/test/integrations/destinations/snapchat_conversion/router/data.ts @@ -69,6 +69,7 @@ export const data = [ }, metadata: { jobId: 1, + userId: 'u1', }, destination: { Config: { @@ -135,6 +136,7 @@ export const data = [ }, metadata: { jobId: 2, + userId: 'u1', }, destination: { Config: { @@ -201,6 +203,7 @@ export const data = [ }, metadata: { jobId: 3, + userId: 'u1', }, destination: { Config: { @@ -244,12 +247,15 @@ export const data = [ metadata: [ { jobId: 1, + userId: 'u1', }, { jobId: 2, + userId: 'u1', }, { jobId: 3, + userId: 'u1', }, ], batched: true, @@ -381,6 +387,7 @@ export const data = [ }, metadata: { jobId: 4, + userId: 'u1', }, destination: { Config: { @@ -412,6 +419,7 @@ export const data = [ metadata: [ { jobId: 4, + userId: 'u1', }, ], batched: false, diff --git a/test/integrations/destinations/snapchat_custom_audience/router/data.ts b/test/integrations/destinations/snapchat_custom_audience/router/data.ts index 2807201e73..44fdb4b47b 100644 --- a/test/integrations/destinations/snapchat_custom_audience/router/data.ts +++ b/test/integrations/destinations/snapchat_custom_audience/router/data.ts @@ -1,13 +1,9 @@ -import { FEATURES, MODULES } from '../../../../../src/v0/util/tags'; - -const DEST_TYPE = 'snapchat_custom_audience'; - export const data = [ { - name: DEST_TYPE, + name: 'snapchat_custom_audience', description: 'Test 0', - feature: FEATURES.ROUTER, - module: MODULES.DESTINATION, + feature: 'router', + module: 'destination', version: 'v0', input: { request: { @@ -20,14 +16,9 @@ export const data = [ refresh_token: 'dummyRefreshToken', developer_token: 'dummyDeveloperToken', }, + userId: 'u1', }, - destination: { - Config: { - segmentId: '123', - disableHashing: false, - schema: 'email', - }, - }, + destination: { Config: { segmentId: '123', disableHashing: false, schema: 'email' } }, message: { userId: 'user 1', anonymousId: 'anon-id-new', @@ -48,17 +39,12 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, ], - destType: DEST_TYPE, + destType: 'snapchat_custom_audience', }, }, }, @@ -104,17 +90,12 @@ export const data = [ developer_token: 'dummyDeveloperToken', refresh_token: 'dummyRefreshToken', }, + userId: 'u1', }, ], batched: false, statusCode: 200, - destination: { - Config: { - disableHashing: false, - schema: 'email', - segmentId: '123', - }, - }, + destination: { Config: { disableHashing: false, schema: 'email', segmentId: '123' } }, }, ], }, diff --git a/test/integrations/destinations/splitio/router/data.ts b/test/integrations/destinations/splitio/router/data.ts index 1004756812..47f8ad5cff 100644 --- a/test/integrations/destinations/splitio/router/data.ts +++ b/test/integrations/destinations/splitio/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'splitio', description: 'Test 0', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -14,7 +12,7 @@ export const data = [ { message: { traits: { - martin: 21.565000000000001, + martin: 21.565, trafficTypeName: 'user', vertical: 'restaurant', eventTypeId: 'page_load end to end', @@ -26,14 +24,8 @@ export const data = [ rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', context: { ip: '14.5.67.21', - traits: { - abc: 'new-val', - key: 'key_user_0', - value: '0.93', - }, - library: { - name: 'http', - }, + traits: { abc: 'new-val', key: 'key_user_0', value: '0.93' }, + library: { name: 'http' }, }, type: 'group', groupId: 'group1', @@ -42,15 +34,9 @@ export const data = [ receivedAt: '2021-04-19T14:53:18.215+05:30', requestIP: '[::1]', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - apiKey: 'abcde', - environment: 'staging', - trafficType: 'user', - }, + Config: { apiKey: 'abcde', environment: 'staging', trafficType: 'user' }, }, }, ], @@ -70,10 +56,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://events.split.io/api/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcde', - }, + headers: { 'Content-Type': 'application/json', Authorization: 'Bearer abcde' }, params: {}, body: { JSON: { @@ -82,11 +65,7 @@ export const data = [ timestamp: 1579566094208, environmentName: 'staging', trafficTypeName: 'user', - properties: { - martin: 21.565, - vertical: 'restaurant', - GMV: false, - }, + properties: { martin: 21.565, vertical: 'restaurant', GMV: false }, }, XML: {}, JSON_ARRAY: {}, @@ -94,19 +73,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'abcde', - environment: 'staging', - trafficType: 'user', - }, + Config: { apiKey: 'abcde', environment: 'staging', trafficType: 'user' }, }, }, ], @@ -117,7 +88,7 @@ export const data = [ { name: 'splitio', description: 'Test 1', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -127,7 +98,7 @@ export const data = [ { message: { traits: { - martin: 21.565000000000001, + martin: 21.565, trafficTypeName: 'user', eventTypeId: 'page_load end to end', timestamp: 1513357833000, @@ -137,13 +108,8 @@ export const data = [ rudderId: 'bda76e3e-87eb-4153-9d1e-e9c2ed48b7a5', context: { ip: '14.5.67.21', - traits: { - abc: 'new-val', - key: 'key_user_0', - }, - library: { - name: 'http', - }, + traits: { abc: 'new-val', key: 'key_user_0' }, + library: { name: 'http' }, }, type: 'identify', timestamp: '2020-01-21T00:21:34.208Z', @@ -151,15 +117,9 @@ export const data = [ receivedAt: '2021-04-19T14:53:18.215+05:30', requestIP: '[::1]', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - apiKey: 'abcde', - environment: 'staging', - trafficType: 'user', - }, + Config: { apiKey: 'abcde', environment: 'staging', trafficType: 'user' }, }, }, ], @@ -179,10 +139,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://events.split.io/api/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer abcde', - }, + headers: { 'Content-Type': 'application/json', Authorization: 'Bearer abcde' }, params: {}, body: { JSON: { @@ -191,9 +148,7 @@ export const data = [ timestamp: 1579566094208, environmentName: 'staging', trafficTypeName: 'user', - properties: { - martin: 21.565, - }, + properties: { martin: 21.565 }, }, XML: {}, JSON_ARRAY: {}, @@ -201,19 +156,11 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - apiKey: 'abcde', - environment: 'staging', - trafficType: 'user', - }, + Config: { apiKey: 'abcde', environment: 'staging', trafficType: 'user' }, }, }, ], diff --git a/test/integrations/destinations/stormly/router/data.ts b/test/integrations/destinations/stormly/router/data.ts index efdae153e4..1973173795 100644 --- a/test/integrations/destinations/stormly/router/data.ts +++ b/test/integrations/destinations/stormly/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'stormly', description: 'Test 0', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -12,49 +10,29 @@ export const data = [ body: { input: [ { - destination: { - Config: { - apiKey: 'dummyApiKey', - }, - ID: 'stormly123', - }, - metadata: { - jobId: 1, - }, + destination: { Config: { apiKey: 'dummyApiKey' }, ID: 'stormly123' }, + metadata: { jobId: 1, userId: 'u1' }, message: { type: 'identify', sentAt: '2022-01-20T13:39:21.033Z', channel: 'web', userId: '5136633649', - context: { - traits: { - name: 'John Doe', - email: 'johndoe@gmail.com', - age: 25, - }, - }, + context: { traits: { name: 'John Doe', email: 'johndoe@gmail.com', age: 25 } }, rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', anonymousId: 'bf412108-0357-4330-b119-7305e767823c', originalTimestamp: '2022-01-20T13:39:21.032Z', }, }, { - destination: { - Config: { - apiKey: 'dummyApiKey', - }, - ID: 'stormly123', - }, - metadata: { - jobId: 2, - }, + destination: { Config: { apiKey: 'dummyApiKey' }, ID: 'stormly123' }, + metadata: { jobId: 2, userId: 'u1' }, message: { type: 'track', event: 'Product Reviewed', properties: { review_id: '12345', product_id: '123', - rating: 3.0, + rating: 3, review_body: 'Average product, expected much more.', groupId: '91Yb32830', }, @@ -82,11 +60,7 @@ export const data = [ FORM: {}, JSON: { timestamp: '2022-01-20T13:39:21.032Z', - traits: { - age: 25, - email: 'johndoe@gmail.com', - name: 'John Doe', - }, + traits: { age: 25, email: 'johndoe@gmail.com', name: 'John Doe' }, userId: '5136633649', }, JSON_ARRAY: {}, @@ -94,42 +68,21 @@ export const data = [ }, endpoint: 'https://rudderstack.t.stormly.com/webhook/rudderstack/identify', files: {}, - headers: { - Authorization: 'Basic dummyApiKey', - 'Content-Type': 'application/json', - }, + headers: { Authorization: 'Basic dummyApiKey', 'Content-Type': 'application/json' }, method: 'POST', params: {}, type: 'REST', version: '1', }, - destination: { - Config: { - apiKey: 'dummyApiKey', - }, - ID: 'stormly123', - }, - metadata: [ - { - jobId: 1, - }, - ], + destination: { Config: { apiKey: 'dummyApiKey' }, ID: 'stormly123' }, + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, { - destination: { - Config: { - apiKey: 'dummyApiKey', - }, - ID: 'stormly123', - }, + destination: { Config: { apiKey: 'dummyApiKey' }, ID: 'stormly123' }, batched: false, error: 'Missing required value from "userIdOnly"', - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], statTags: { destType: 'STORMLY', errorCategory: 'dataValidation', diff --git a/test/integrations/destinations/the_trade_desk/router/data.ts b/test/integrations/destinations/the_trade_desk/router/data.ts index 3c9cb1cc70..b02a80f563 100644 --- a/test/integrations/destinations/the_trade_desk/router/data.ts +++ b/test/integrations/destinations/the_trade_desk/router/data.ts @@ -36,6 +36,7 @@ export const data = [ destination: sampleDestination, metadata: { jobId: 1, + userId: 'u1', }, }, { @@ -53,6 +54,7 @@ export const data = [ destination: sampleDestination, metadata: { jobId: 2, + userId: 'u1', }, }, ], @@ -119,9 +121,11 @@ export const data = [ metadata: [ { jobId: 1, + userId: 'u1', }, { jobId: 2, + userId: 'u1', }, ], batched: true, @@ -160,6 +164,7 @@ export const data = [ destination: sampleDestination, metadata: { jobId: 1, + userId: 'u1', }, }, { @@ -177,6 +182,7 @@ export const data = [ destination: sampleDestination, metadata: { jobId: 2, + userId: 'u1', }, }, ], @@ -272,9 +278,11 @@ export const data = [ metadata: [ { jobId: 1, + userId: 'u1', }, { jobId: 2, + userId: 'u1', }, ], batched: true, @@ -313,6 +321,7 @@ export const data = [ destination: overrideDestination(sampleDestination, { audienceId: '' }), metadata: { jobId: 1, + userId: 'u1', }, }, { @@ -330,6 +339,7 @@ export const data = [ destination: overrideDestination(sampleDestination, { audienceId: '' }), metadata: { jobId: 2, + userId: 'u1', }, }, ], @@ -345,7 +355,10 @@ export const data = [ output: [ { batched: false, - metadata: [{ jobId: 1 }, { jobId: 2 }], + metadata: [ + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, + ], statusCode: 400, error: 'Segment name is not present. Aborting', statTags: { @@ -387,6 +400,7 @@ export const data = [ destination: overrideDestination(sampleDestination, { advertiserId: '' }), metadata: { jobId: 1, + userId: 'u1', }, }, ], @@ -402,7 +416,7 @@ export const data = [ output: [ { batched: false, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 400, error: 'Advertiser ID is not present. Aborting', statTags: { @@ -444,6 +458,7 @@ export const data = [ destination: overrideDestination(sampleDestination, { advertiserSecretKey: '' }), metadata: { jobId: 1, + userId: 'u1', }, }, ], @@ -459,7 +474,7 @@ export const data = [ output: [ { batched: false, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 400, error: 'Advertiser Secret Key is not present. Aborting', statTags: { @@ -501,6 +516,7 @@ export const data = [ destination: overrideDestination(sampleDestination, { ttlInDays: 190 }), metadata: { jobId: 1, + userId: 'u1', }, }, ], @@ -516,7 +532,7 @@ export const data = [ output: [ { batched: false, - metadata: [{ jobId: 1 }], + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 400, error: 'TTL is out of range. Allowed values are 0 to 180 days', statTags: { @@ -533,4 +549,298 @@ export const data = [ }, }, }, + { + name: destType, + description: 'Invalid action type', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'record', + action: 'insert', + fields: { + DAID: 'test-daid-1', + UID2: 'test-uid2-1', + }, + channel: 'sources', + context: sampleContext, + recordId: '1', + }, + destination: sampleDestination, + metadata: { + jobId: 1, + }, + }, + { + message: { + type: 'record', + action: 'update', + fields: { + DAID: 'test-daid-2', + UID2: null, + }, + channel: 'sources', + context: sampleContext, + recordId: '2', + }, + destination: sampleDestination, + metadata: { + jobId: 2, + }, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://sin-data.adsrvr.org/data/advertiser', + headers: {}, + params: {}, + body: { + JSON: { + DataProviderId: dataProviderId, + AdvertiserId: advertiserId, + Items: [ + { + DAID: 'test-daid-1', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, + { + UID2: 'test-uid2-1', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 1, + }, + ], + batched: true, + statusCode: 200, + destination: sampleDestination, + }, + { + batched: false, + metadata: [{ jobId: 2 }], + statusCode: 400, + error: 'Invalid action type', + statTags: { + destType: destTypeInUpperCase, + implementation: 'cdkV2', + feature: 'router', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: sampleDestination, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: 'Empty fields in the message', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'record', + action: 'insert', + fields: {}, + channel: 'sources', + context: sampleContext, + recordId: '1', + }, + destination: sampleDestination, + metadata: { + jobId: 1, + }, + }, + { + message: { + type: 'record', + action: 'insert', + fields: { + DAID: 'test-daid-1', + }, + channel: 'sources', + context: sampleContext, + recordId: '2', + }, + destination: sampleDestination, + metadata: { + jobId: 2, + }, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://sin-data.adsrvr.org/data/advertiser', + headers: {}, + params: {}, + body: { + JSON: { + DataProviderId: dataProviderId, + AdvertiserId: advertiserId, + Items: [ + { + DAID: 'test-daid-1', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 2, + }, + ], + batched: true, + statusCode: 200, + destination: sampleDestination, + }, + { + batched: false, + metadata: [{ jobId: 1 }], + statusCode: 400, + error: 'Fields cannot be empty', + statTags: { + destType: destTypeInUpperCase, + implementation: 'cdkV2', + feature: 'router', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: sampleDestination, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: '`fields` is missing', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'record', + action: 'insert', + channel: 'sources', + context: sampleContext, + recordId: '1', + }, + destination: sampleDestination, + metadata: { + jobId: 1, + }, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + metadata: [{ jobId: 1 }], + statusCode: 400, + error: 'Fields cannot be empty', + statTags: { + destType: destTypeInUpperCase, + implementation: 'cdkV2', + feature: 'router', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: sampleDestination, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, ]; diff --git a/test/integrations/destinations/tiktok_ads/mocks.ts b/test/integrations/destinations/tiktok_ads/mocks.ts new file mode 100644 index 0000000000..a5d8fc4a63 --- /dev/null +++ b/test/integrations/destinations/tiktok_ads/mocks.ts @@ -0,0 +1,5 @@ +import config from '../../../../src/v0/destinations/tiktok_ads/config'; + +export const defaultMockFns = () => { + jest.replaceProperty(config, 'maxBatchSizeV2', 3); +}; diff --git a/test/integrations/destinations/tiktok_ads/processor/data.ts b/test/integrations/destinations/tiktok_ads/processor/data.ts index 76a4a1ca89..9d7c3a8d10 100644 --- a/test/integrations/destinations/tiktok_ads/processor/data.ts +++ b/test/integrations/destinations/tiktok_ads/processor/data.ts @@ -89,7 +89,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -114,7 +114,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -256,7 +256,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -281,7 +281,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'InitiateCheckout', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -418,7 +418,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -443,7 +443,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'AddToWishlist', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -581,7 +581,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -697,7 +697,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -722,7 +722,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'AddToWishlist', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -863,7 +863,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -888,7 +888,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'AddToWishlist', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -1028,7 +1028,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: true, }, }, @@ -1053,7 +1053,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'Subscribe', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -1192,7 +1192,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1217,7 +1217,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'AddPaymentInfo', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -1355,7 +1355,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1467,7 +1467,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1580,7 +1580,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1605,7 +1605,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'AddPaymentInfo', event_id: '1616318632825_357', properties: { @@ -1743,7 +1743,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1768,7 +1768,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'SubmitForm', event_id: '16163186328257', timestamp: '2020-09-17T19:49:27Z', @@ -1894,7 +1894,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -1919,7 +1919,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'SubmitForm', event_id: '16163186328257', timestamp: '2020-09-17T19:49:27Z', @@ -2040,7 +2040,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -2065,7 +2065,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'Contact', event_id: '16163186328257', timestamp: '2020-09-17T19:49:27Z', @@ -2204,7 +2204,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -2318,7 +2318,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -2343,7 +2343,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -2482,7 +2482,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -2507,7 +2507,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'PlaceAnOrder', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -2650,7 +2650,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: true, }, }, @@ -2675,7 +2675,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'Subscribe', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -2819,7 +2819,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: true, }, }, @@ -2844,7 +2844,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'Subscribe', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -2984,7 +2984,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -3009,7 +3009,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -3148,7 +3148,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, eventsToStandard: [ { @@ -3187,7 +3187,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'download', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -3249,7 +3249,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'search', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -3388,7 +3388,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, eventsToStandard: [ { @@ -3508,7 +3508,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, eventsToStandard: [ { @@ -3543,7 +3543,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'download', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -3681,7 +3681,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: true, eventsToStandard: [ { @@ -3716,7 +3716,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'download', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -3854,7 +3854,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: true, eventsToStandard: [ { @@ -3889,7 +3889,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'download', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4048,7 +4048,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -4073,7 +4073,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4219,7 +4219,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -4244,7 +4244,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4394,7 +4394,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -4419,7 +4419,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4541,7 +4541,7 @@ export const data = [ category: 'Games', url: 'https://www.website.com/product/path', image_url: 'https://www.website.com/product/path.jpg', - brand:"brand_name" + brand: 'brand_name', }, { product_id: '345', @@ -4574,7 +4574,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, }, }, @@ -4599,7 +4599,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'CompletePayment', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4619,7 +4619,6 @@ export const data = [ content_name: 'Monopoly', price: 14, quantity: 1, - brand:"brand_name" }, { content_type: 'product_group', @@ -4752,7 +4751,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, sendCustomEvents: true, }, @@ -4778,7 +4777,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'custom_event', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -4924,7 +4923,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, sendCustomEvents: false, }, @@ -4956,7 +4955,7 @@ export const data = [ }, { name: 'tiktok_ads', - description: 'Test 29 -> Camel Case Custom Event Pass', + description: 'Test 31 -> Camel Case Custom Event Pass', feature: 'processor', module: 'destination', version: 'v0', @@ -5044,7 +5043,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: '{{PIXEL-CODE}}', hashUserProperties: false, sendCustomEvents: true, }, @@ -5070,7 +5069,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: '{{PIXEL-CODE}}', event: 'customEvent', event_id: '1616318632825_357', timestamp: '2020-09-17T19:49:27Z', @@ -5126,4 +5125,1749 @@ export const data = [ }, }, }, + { + name: 'tiktok_ads', + description: 'Test 32 -> V2 -> Camel Case Custom Event Pass', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'customEvent', + properties: { + eventId: '1616318632825_357', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + url: 'http://demo.mywebsite.com/purchase', + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + sendCustomEvents: true, + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'customEvent', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + }, + user: { + locale: 'en-US', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: + 'Test 33 -> V2 -> Event mapped to one standard event with contents present as it is in properties', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + sendCustomEvents: true, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'download', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 34 -> V2 -> Event mapped to multiple standard events and no phone', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + sendCustomEvents: true, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + { + from: 'AddToCart', + to: 'AddToWishlist', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'download', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + }, + user: { + locale: 'en-US', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + { + event: 'AddToWishlist', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + }, + user: { + locale: 'en-US', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 35 -> V2 -> array of external_id and phone number', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + externalId: [ + { + type: 'tiktokExternalId', + id: [ + 'f0e388f53921a51f0bb0fc8a2944109ec188b5', + '1f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ], + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + phone: ['+12345432', '+134234325'], + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + sendCustomEvents: true, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + { + from: 'AddToCart', + to: 'AddToWishlist', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'download', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + phone: ['+12345432', '+134234325'], + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: [ + 'f0e388f53921a51f0bb0fc8a2944109ec188b5', + '1f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ], + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + { + event: 'AddToWishlist', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + phone: ['+12345432', '+134234325'], + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: [ + 'f0e388f53921a51f0bb0fc8a2944109ec188b5', + '1f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ], + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 36-> V2 -> Event not standard and no custom events allowed', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + 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 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + locale: 'en-US', + ip: '13.57.97.131', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'Product Added to Wishlist1', + properties: { + eventId: '1616318632825_357', + testEventCode: 'sample rudder test_event_code', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + phone_number: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + }, + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: + 'Event name (product added to wishlist1) is not valid, must be mapped to one of standard events', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 37-> V2 -> No Message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + event: 'Product Added to Wishlist1', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Event type is required', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 38-> V2 -> Event not found', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Event name is required', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 39-> V2 -> Access Token not found', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + pixelCode: 'configuration', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Access Token not found. Aborting', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 40-> V2 -> Pixel Code not found. Aborting', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Pixel Code not found. Aborting', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 41 -> V2 -> One of standard event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'abc@xyz.com', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + externalId: [ + { + type: 'tiktokExternalId', + id: [ + 'f0e388f53921a51f0bb0fc8a2944109ec188b5', + '1f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ], + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'viewcontent', + properties: { + eventId: '1616318632825_357', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + phone: ['+12345432', '+134234325'], + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: true, + sendCustomEvents: false, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + { + from: 'AddToCart', + to: 'AddToWishlist', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'ViewContent', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + email: 'ee278943de84e5d6243578ee1a1057bcce0e50daad9755f45dfa64b60b13bc5d', + external_id: [ + '3e0c7a51acd326b87f29596e38c22cbeb732df37bc5c8f5f524c14b55d3472db', + 'f8be04e62f5a3eba31c8b9380843666f28f3ab5f44a380f47fac04e9ce7b2168', + ], + ip: '13.57.97.131', + phone: [ + '49a15e38bdc2572d362a924c2ddd100baed0fe29db44270d3700fcef03b18c39', + '5a6a7a09b18278e220312ce26d711ff7c8263d0965ee3b1d26b1b6f0ac7e71b3', + ], + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 42 -> V2 -> One of standard event and contents from products', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'abc@xyz.com', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + externalId: [ + { + type: 'tiktokExternalId', + id: [ + 'f0e388f53921a51f0bb0fc8a2944109ec188b5', + '1f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ], + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'viewcontent', + properties: { + order_id: 1234, + shop_id: 4567, + description: 'Viewed games', + query: 'New age games', + contentType: 'product_group', + eventId: '1616318632825_357', + products: [ + { + product_id: 123, + sku: 'G-32', + name: 'Monopoly', + price: 14, + quantity: 1, + contentType: 'product_group', + category: 'Games', + brand: 'adidas', + image_url: 'https://www.website.com/product/path.jpg', + }, + { + product_id: 345, + sku: 'F-32', + name: 'UNO', + price: 3.45, + contentType: 'product_group', + quantity: 2, + }, + ], + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + phone: ['+12345432', '+134234325'], + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: true, + sendCustomEvents: false, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + { + from: 'AddToCart', + to: 'AddToWishlist', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'ViewContent', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + order_id: '1234', + shop_id: '4567', + description: 'Viewed games', + query: 'New age games', + content_type: 'product_group', + contents: [ + { + price: 14, + quantity: 1, + content_category: 'Games', + content_id: '123', + content_name: 'Monopoly', + }, + { + price: 3.45, + quantity: 2, + content_id: '345', + content_name: 'UNO', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + email: 'ee278943de84e5d6243578ee1a1057bcce0e50daad9755f45dfa64b60b13bc5d', + external_id: [ + '3e0c7a51acd326b87f29596e38c22cbeb732df37bc5c8f5f524c14b55d3472db', + 'f8be04e62f5a3eba31c8b9380843666f28f3ab5f44a380f47fac04e9ce7b2168', + ], + ip: '13.57.97.131', + phone: [ + '49a15e38bdc2572d362a924c2ddd100baed0fe29db44270d3700fcef03b18c39', + '5a6a7a09b18278e220312ce26d711ff7c8263d0965ee3b1d26b1b6f0ac7e71b3', + ], + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 43 -> V2 -> Contents present as object in properties', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + traits: { + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + contents: { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + clickId: 'dummyclickId', + currency: 'USD', + value: 46, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + version: 'v2', + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + sendCustomEvents: true, + eventsToStandard: [ + { + from: 'addToCart', + to: 'download', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source: 'web', + event_source_id: '{{PIXEL-CODE}}', + partner_name: 'RudderStack', + data: [ + { + event: 'download', + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + content_type: 'product', + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + ], + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: 'Test 44 -> Events 2.0 Event type identify not suported', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + timestamp: '2020-09-17T19:49:27Z', + type: 'identify', + event: 'contact', + properties: {}, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Event type identify is not supported', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'TIKTOK_ADS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads', + description: + 'Test 45-> events 1.0 build contents from properties.product.$ where length of prodicts is 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + 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 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + externalId: [ + { + type: 'tiktokExternalId', + id: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + products: [], + currency: 'USD', + value: 46, + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + phone_number: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + }, + }, + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: '{{PIXEL-CODE}}', + hashUserProperties: false, + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/pixel/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + pixel_code: '{{PIXEL-CODE}}', + event: 'CompletePayment', + event_id: '1616318632825_357', + timestamp: '2020-09-17T19:49:27Z', + properties: { + currency: 'USD', + value: 46, + contents: [], + }, + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + phone_number: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', + external_id: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + }, + partner_name: 'RudderStack', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; diff --git a/test/integrations/destinations/tiktok_ads/router/data.ts b/test/integrations/destinations/tiktok_ads/router/data.ts index a8c233c7a8..7246b8c04a 100644 --- a/test/integrations/destinations/tiktok_ads/router/data.ts +++ b/test/integrations/destinations/tiktok_ads/router/data.ts @@ -1,9 +1,9 @@ import { FEATURES } from '../../../../../src/v0/util/tags'; - +import { defaultMockFns } from '../mocks'; export const data = [ { name: 'tiktok_ads', - description: 'Test 0', + description: 'Test 0 -> Events 1.0 Multiple events in single batch', feature: FEATURES.ROUTER, module: 'destination', version: 'v0', @@ -22,21 +22,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', ip: '13.57.97.131', locale: 'en-US', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, externalId: [ { type: 'tiktokExternalId', @@ -54,18 +46,8 @@ export const data = [ eventId: '1616318632825_357', clickId: 'dummyClickId', contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, - { - price: 30, - quantity: 1, - content_type: 'dress', - content_id: '1197218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, ], currency: 'USD', value: 46.0, @@ -87,12 +69,13 @@ export const data = [ sentAt: '2019-10-14T09:03:22.563Z', }, metadata: { - jobId: 5, + jobId: 1, + userId: 'u1', }, destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: false, }, }, @@ -108,21 +91,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', locale: 'en-US', ip: '13.57.97.131', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, externalId: [ { type: 'tiktokExternalId', @@ -150,18 +125,8 @@ export const data = [ }, }, contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, - { - price: 30, - quantity: 1, - content_type: 'dress', - content_id: '1197218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, ], currency: 'USD', value: 46.0, @@ -172,12 +137,13 @@ export const data = [ sentAt: '2019-10-14T09:03:22.563Z', }, metadata: { - jobId: 1, + jobId: 2, + userId: 'u1', }, destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: false, }, }, @@ -193,21 +159,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', locale: 'en-US', ip: '13.57.97.131', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, externalId: [ { type: 'tiktokExternalId', @@ -238,18 +196,8 @@ export const data = [ ip: '13.57.97.131', }, contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, - { - price: 30, - quantity: 1, - content_type: 'dress', - content_id: '1197218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, ], currency: 'USD', value: 46.0, @@ -260,12 +208,13 @@ export const data = [ sentAt: '2019-10-14T09:03:22.563Z', }, metadata: { - jobId: 2, + jobId: 3, + userId: 'u1', }, destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: false, }, }, @@ -281,21 +230,13 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', locale: 'en-US', ip: '13.57.97.131', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, + os: { name: '', version: '' }, + screen: { density: 2 }, externalId: [ { type: 'tiktokExternalId', @@ -326,18 +267,8 @@ export const data = [ ip: '13.57.97.131', }, contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, - { - price: 30, - quantity: 1, - content_type: 'dress', - content_id: '1197218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, ], currency: 'USD', value: 46.0, @@ -349,11 +280,12 @@ export const data = [ }, metadata: { jobId: 4, + userId: 'u1', }, destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: false, }, }, @@ -382,7 +314,7 @@ export const data = [ params: {}, body: { JSON: { - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: 'dummyPixelCode', partner_name: 'RudderStack', batch: [ { @@ -392,12 +324,7 @@ export const data = [ timestamp: '2020-09-17T19:49:27Z', properties: { contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, { price: 30, quantity: 1, @@ -409,9 +336,7 @@ export const data = [ value: 46, }, context: { - ad: { - callback: 'dummyClickId', - }, + ad: { callback: 'dummyClickId' }, page: { url: 'http://demo.mywebsite.com/purchase', referrer: 'http://demo.mywebsite.com', @@ -454,12 +379,7 @@ export const data = [ properties: { value: 46, contents: [ - { - price: 8, - quantity: 2, - content_id: '1077218', - content_type: 'socks', - }, + { price: 8, quantity: 2, content_id: '1077218', content_type: 'socks' }, { price: 30, quantity: 1, @@ -495,12 +415,7 @@ export const data = [ properties: { value: 46, contents: [ - { - price: 8, - quantity: 2, - content_id: '1077218', - content_type: 'socks', - }, + { price: 8, quantity: 2, content_id: '1077218', content_type: 'socks' }, { price: 30, quantity: 1, @@ -536,12 +451,7 @@ export const data = [ properties: { value: 46, contents: [ - { - price: 8, - quantity: 2, - content_id: '1077218', - content_type: 'socks', - }, + { price: 8, quantity: 2, content_id: '1077218', content_type: 'socks' }, { price: 30, quantity: 1, @@ -561,17 +471,21 @@ export const data = [ files: {}, }, metadata: [ - { - jobId: 5, - }, { jobId: 1, + userId: 'u1', }, { jobId: 2, + userId: 'u1', + }, + { + jobId: 3, + userId: 'u1', }, { jobId: 4, + userId: 'u1', }, ], batched: true, @@ -579,7 +493,7 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: false, }, }, @@ -591,7 +505,7 @@ export const data = [ }, { name: 'tiktok_ads', - description: 'Test 1', + description: 'Test 1 -> Events 1.0 Single Event inside batch', feature: FEATURES.ROUTER, module: 'destination', version: 'v0', @@ -610,27 +524,14 @@ export const data = [ namespace: 'com.rudderlabs.javascript', version: '1.0.0', }, - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.0.0', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', locale: 'en-US', ip: '13.57.97.131', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - externalId: [ - { - type: 'tiktokExternalId', - id: '1234', - }, - ], + os: { name: '', version: '' }, + screen: { density: 2 }, + externalId: [{ type: 'tiktokExternalId', id: '1234' }], }, messageId: '84e26acc-56a5-4835-8233-591137fca468', session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', @@ -646,27 +547,14 @@ export const data = [ url: 'http://demo.mywebsite.com/purchase', referrer: 'http://demo.mywebsite.com', }, - user: { - phone_number: '+858987675687', - email: 'sample@sample.com', - }, + user: { phone_number: '+858987675687', email: 'sample@sample.com' }, userAgent: 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', ip: '13.57.97.131', }, contents: [ - { - price: 8, - quantity: 2, - content_type: 'socks', - content_id: '1077218', - }, - { - price: 30, - quantity: 1, - content_type: 'dress', - content_id: '1197218', - }, + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, ], currency: 'USD', value: 46.0, @@ -678,11 +566,12 @@ export const data = [ }, metadata: { jobId: 3, + userId: 'u1', }, destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: true, }, }, @@ -723,22 +612,12 @@ export const data = [ }, event: 'AddToWishlist', event_id: '1616318632825_357', - pixel_code: 'A1T8T4UYGVIQA8ORZMX9', + pixel_code: 'dummyPixelCode', partner_name: 'RudderStack', properties: { contents: [ - { - content_id: '1077218', - content_type: 'socks', - price: 8, - quantity: 2, - }, - { - content_id: '1197218', - content_type: 'dress', - price: 30, - quantity: 1, - }, + { content_id: '1077218', content_type: 'socks', price: 8, quantity: 2 }, + { content_id: '1197218', content_type: 'dress', price: 30, quantity: 1 }, ], currency: 'USD', value: 46, @@ -764,13 +643,14 @@ export const data = [ destination: { Config: { accessToken: 'dummyAccessToken', - pixelCode: 'A1T8T4UYGVIQA8ORZMX9', + pixelCode: 'dummyPixelCode', hashUserProperties: true, }, }, metadata: [ { jobId: 3, + userId: 'u1', }, ], statusCode: 200, @@ -780,4 +660,2144 @@ export const data = [ }, }, }, + { + name: 'tiktok_ads', + description: + 'Test 2 -> Events 2.0 Single event is mapped to multiple tiktok event in config and exceeding max batch size', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id5' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id1' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id2' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 3, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id4' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 4, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + destType: 'tiktok_ads', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id5', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id1', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id1', + }, + event: 'download', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + }, + { + jobId: 2, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id2', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id4', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 3, + userId: 'u1', + }, + { + jobId: 4, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: 'tiktok_ads', + description: + 'Test 3 -> Events 2.0 Single event is mapped to single tiktok event in config and over the max batch limit', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id5' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id1' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id2' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 3, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id4' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 4, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + destType: 'tiktok_ads', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id5', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id1', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id2', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + }, + { + jobId: 2, + userId: 'u1', + }, + { + jobId: 3, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id4', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 4, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: 'tiktok_ads', + description: 'Test 4 -> One input event is invalid with one event to multiple events', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id5' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id1' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'abc', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id2' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 3, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id4' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 4, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + destType: 'tiktok_ads', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id5', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id2', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id4', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + }, + { + jobId: 3, + userId: 'u1', + }, + { + jobId: 4, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + batched: false, + destination: { + Config: { + accessToken: 'dummyAccessToken', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + hashUserProperties: false, + pixelCode: 'dummyPixelCode', + version: 'v2', + }, + }, + error: 'Event name (abc) is not valid, must be mapped to one of standard events', + metadata: [ + { + jobId: 2, + userId: 'u1', + }, + ], + statTags: { + destType: 'TIKTOK_ADS', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + statusCode: 400, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: 'tiktok_ads', + description: 'Test 5 -> Some input events are test events with one event to multiple events', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id5' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id1' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'addToCart', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id2' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + testEventCode: 'Some test event code for testing setup', + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 3, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id4' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 4, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + destType: 'tiktok_ads', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { + url: 'http://demo.mywebsite.com/purchase', + referrer: 'http://demo.mywebsite.com', + }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id5', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id1', + }, + event: 'CompletePayment', + }, + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id1', + }, + event: 'download', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + }, + { + jobId: 2, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id4', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 4, + userId: 'u1', + }, + ], + batched: true, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + test_event_code: 'Some test event code for testing setup', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id2', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 3, + userId: 'u1', + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: 'tiktok_ads', + description: 'Test 6 -> All input events are test events', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id5' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + testEventCode: 'TEST_EVENT_CODE', + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + message: { + anonymousId: '21e13f4bc7ceddad', + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + ip: '13.57.97.131', + locale: 'en-US', + externalId: [{ type: 'tiktokExternalId', id: 'id2' }], + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + timestamp: '2020-09-17T19:49:27Z', + type: 'track', + event: 'checkout step completed', + properties: { + testEventCode: 'TEST_EVENT_CODE', + eventId: '1616318632825_357', + clickId: 'dummyClickId', + contents: [ + { price: 8, quantity: 2, content_type: 'socks', content_id: '1077218' }, + { price: 30, quantity: 1, content_type: 'dress', content_id: '1197218' }, + ], + currency: 'USD', + value: 46, + url: 'http://demo.mywebsite.com/purchase', + phone: '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + email: 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 2, + userId: 'u1', + }, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + destType: 'tiktok_ads', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + test_event_code: 'TEST_EVENT_CODE', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id5', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 1, + userId: 'u1', + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + eventsToStandard: [ + { from: 'addToCart', to: 'CompletePayment' }, + { from: 'addToCart', to: 'download' }, + ], + }, + }, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/event/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_source_id: 'dummyPixelCode', + event_source: 'web', + partner_name: 'RudderStack', + test_event_code: 'TEST_EVENT_CODE', + data: [ + { + event_id: '1616318632825_357', + event_time: 1600372167, + properties: { + contents: [ + { + price: 8, + quantity: 2, + content_type: 'socks', + content_id: '1077218', + }, + { + price: 30, + quantity: 1, + content_type: 'dress', + content_id: '1197218', + }, + ], + content_type: 'product', + currency: 'USD', + value: 46, + }, + page: { url: 'http://demo.mywebsite.com/purchase' }, + user: { + locale: 'en-US', + email: + 'f0e388f53921a51f0bb0fc8a2944109ec188b59172935d8f23020b1614cc44bc', + phone: + '2f9d2b4df907e5c9a7b3434351b55700167b998a83dc479b825096486ffcf4ea', + ip: '13.57.97.131', + user_agent: + 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion', + external_id: 'id2', + }, + event: 'CompletePayment', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + jobId: 2, + userId: 'u1', + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + accessToken: 'dummyAccessToken', + pixelCode: 'dummyPixelCode', + hashUserProperties: false, + version: 'v2', + }, + }, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, ]; diff --git a/test/integrations/destinations/tiktok_ads_offline_events/processor/data.ts b/test/integrations/destinations/tiktok_ads_offline_events/processor/data.ts index a4ff796f37..2b9341b851 100644 --- a/test/integrations/destinations/tiktok_ads_offline_events/processor/data.ts +++ b/test/integrations/destinations/tiktok_ads_offline_events/processor/data.ts @@ -1,618 +1,617 @@ export const data = [ - { - "name": "tiktok_ads_offline_events", - "description": "Test 0", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "type": "Identify", - "userId": "yash001", - "originalTimestamp": "2019-10-14T09:03:17.562Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "statusCode": 400, - "error": "Event type identify is not supported", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "instrumentation", - "destType": "TIKTOK_ADS_OFFLINE_EVENTS", - "module": "destination", - "implementation": "native", - "feature": "processor" - } - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 1", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": false - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7181537436256731137", - "eventId": "1616318632825_352", - "order_id": "abc_xyz", - "shop_id": "123abc", - "currency": "USD", - "value": 46, - "price": 8, - "quantity": 2, - "content_type": "product1234", - "product_id": "1077218", - "name": "socks", - "category": "Men's cloth" - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/track/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7181537436256731137", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "properties": { - "order_id": "abc_xyz", - "shop_id": "123abc", - "currency": "USD", - "value": 46, - "event_channel": "web", - "contents": [ - { - "content_name": "socks", - "content_type": "product1234", - "content_category": "Men's cloth", - "content_id": "1077218", - "price": 8, - "quantity": 2 - } - ] - }, - "event": "Subscribe", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "event_set_id": "7181537436256731137", - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 2", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "1234567890" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7181537436256731137", - "eventId": "1616318632825_352", - "prop1": "val1" - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/track/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7181537436256731137", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "properties": { - "event_channel": "web" - }, - "event": "Subscribe", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "event_set_id": "7181537436256731137", - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 3", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true, - "eventsToStandard": [ - { - "from": "RandomEvent", - "to": "SubmitForm" - } - ] - } - }, - "message": { - "event": "RandomEvent", - "context": { - "traits": { - "phone": "1234567890" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7185009018564395009", - "eventId": "1616318632003_004", - "prop1": "val1" - }, - "userId": "eventIdn01", - "timestamp": "2023-01-03", - "type": "track" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/track/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7185009018564395009", - "event_id": "1616318632003_004", - "timestamp": "2023-01-03", - "properties": { - "event_channel": "web" - }, - "event": "SubmitForm", - "partner_name": "RudderStack", - "context": { - "user": { - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "event_set_id": "7185009018564395009", - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 4", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "hashUserProperties": true - } - }, - "message": { - "type": "track", - "userId": "yash001", - "originalTimestamp": "2019-10-14T09:03:17.562Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "statusCode": 400, - "error": "Access Token not found", - "statTags": { - "errorCategory": "dataValidation", - "errorType": "configuration", - "destType": "TIKTOK_ADS_OFFLINE_EVENTS", - "module": "destination", - "implementation": "native", - "feature": "processor" - } - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 5", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true - } - }, - "message": { - "event": "subscribe", - "context": { - "traits": { - "phone": "1234567890", - "email": "random@mail.com" - }, - "channel": "web" - }, - "properties": { - "eventSetId": "7181537436256731137", - "eventId": "1616318632825_352", - "products": [ - { - "price": 8, - "quantity": 2, - "content_type": "product1", - "product_id": "1077218", - "name": "socks", - "category": "Men's cloth" - }, - { - "price": 18, - "quantity": 12, - "content_type": "product2", - "product_id": "1077219", - "name": "socks1", - "category": "Men's cloth1" - } - ] - }, - "type": "track", - "userId": "eventIdn01", - "timestamp": "2023-01-03" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/track/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7181537436256731137", - "event_id": "1616318632825_352", - "timestamp": "2023-01-03", - "properties": { - "event_channel": "web", - "contents": [ - { - "content_name": "socks", - "content_type": "product1", - "content_category": "Men's cloth", - "content_id": "1077218", - "price": 8, - "quantity": 2 - }, - { - "content_name": "socks1", - "content_type": "product2", - "content_category": "Men's cloth1", - "content_id": "1077219", - "price": 18, - "quantity": 12 - } - ] - }, - "event": "Subscribe", - "partner_name": "RudderStack", - "context": { - "user": { - "emails": [ - "d9fcca64ec1b250da4261a3f89a8e0f7749c4e0f5a1a918e5397194c8b5a9f16" - ], - "phone_numbers": [ - "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646" - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "event_set_id": "7181537436256731137", - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - }, - { - "name": "tiktok_ads_offline_events", - "description": "Test 6", - "feature": "processor", - "module": "destination", - "version": "v0", - "input": { - "request": { - "body": [ - { - "destination": { - "Config": { - "accessToken": "dummyAccessToken", - "hashUserProperties": true, - "eventsToStandard": [ - { - "from": "CompletePayment", - "to": "Purchase" - } - ] - } - }, - "message": { - "type": "track", - "event": "CompletePayment", - "sentAt": "2023-03-22T00:02:33.802Z", - "traits": { - "email": [ - "efaaf5c8803af4fbf305d7a110c832673d89ed40983770329092fd04b0ba7900", - "078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f" - ], - "phone": [ - "c4994d14e724936f1169147dddf1673a09af69b55cc54bc695dbe246bd093b05", - "078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f" - ] - }, - "userId": "60241286212", - "channel": "sources", - "context": { - "sources": { - "job_id": "2N4WuoNQpGYmCPASUvnV86QyhY4/Syncher", - "version": "v1.20.0", - "job_run_id": "cgd4a063b2fn2e1j0q90", - "task_run_id": "cgd4a063b2fn2e1j0qa0" - } - }, - "recordId": "16322", - "rudderId": "5b4ed73f-69aa-4198-88d1-3d4d509acbf1", - "messageId": "cgd4b663b2fn2e1j8th0", - "timestamp": "2023-03-22T00:02:33.170Z", - "properties": { - "phone": "c4994d14e724936f1169147dddf1673a09af69b55cc54bc695dbe246bd093b05", - "value": 32.839999999999996, - "emails": "[\"efaaf5c8803af4fbf305d7a110c832673d89ed40983770329092fd04b0ba7900\",\"078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]", - "eventId": "8965fb56-090f-47a5-aa7f-bbab22d9ec90", - "currency": "USD", - "order_id": 60241286212, - "eventSetId": "7211223771099742210", - "event_name": "CompletePayment" - }, - "receivedAt": "2023-03-22T00:02:33.171Z", - "request_ip": "10.7.78.187", - "anonymousId": "60241286212", - "originalTimestamp": "2023-03-22T00:02:33.802Z" - } - } - ] - } - }, - "output": { - "response": { - "status": 200, - "body": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://business-api.tiktok.com/open_api/v1.3/offline/track/", - "headers": { - "Access-Token": "dummyAccessToken", - "Content-Type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "event_set_id": "7211223771099742210", - "event_id": "8965fb56-090f-47a5-aa7f-bbab22d9ec90", - "timestamp": "2023-03-22T00:02:33.170Z", - "properties": { - "order_id": 60241286212, - "currency": "USD", - "value": 32.839999999999996 - }, - "event": "Purchase", - "partner_name": "RudderStack", - "context": { - "user": { - "emails": [ - "4dc75b075057df6f6b729e74a9feed1244dcf8ceb7903eaba13203f3268ae4b9", - "77b639edeb3cd6c801ea05176b8acbfa38d5f38490b764cd0c80756d0cf9ec68" - ], - "phone_numbers": [ - "28b7b205c2936d2ded022d2587fb2677a76e560e921b3ad615b739b0238baa5d", - "77b639edeb3cd6c801ea05176b8acbfa38d5f38490b764cd0c80756d0cf9ec68" - ] - } - } - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "event_set_id": "7211223771099742210", - "userId": "" - }, - "statusCode": 200 - } - ] - } - } - } -] \ No newline at end of file + { + name: 'tiktok_ads_offline_events', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: true, + }, + }, + message: { + type: 'Identify', + userId: 'yash001', + originalTimestamp: '2019-10-14T09:03:17.562Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Event type identify is not supported', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + destType: 'TIKTOK_ADS_OFFLINE_EVENTS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 1', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: false, + }, + }, + message: { + event: 'subscribe', + context: { + traits: { + phone: 'c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646', + }, + channel: 'web', + }, + properties: { + eventSetId: '7181537436256731137', + eventId: '1616318632825_352', + order_id: 'abc_xyz', + shop_id: '123abc', + currency: 'USD', + value: 46, + price: 8, + quantity: 2, + content_type: 'product1234', + product_id: '1077218', + name: 'socks', + category: "Men's cloth", + }, + type: 'track', + userId: 'eventIdn01', + timestamp: '2023-01-03', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_set_id: '7181537436256731137', + event_id: '1616318632825_352', + timestamp: '2023-01-03', + properties: { + order_id: 'abc_xyz', + shop_id: '123abc', + currency: 'USD', + value: 46, + event_channel: 'web', + contents: [ + { + content_name: 'socks', + content_type: 'product1234', + content_category: "Men's cloth", + content_id: '1077218', + price: 8, + quantity: 2, + }, + ], + }, + event: 'Subscribe', + partner_name: 'RudderStack', + context: { + user: { + phone_numbers: [ + 'c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646', + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + event_set_id: '7181537436256731137', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 2', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: true, + }, + }, + message: { + event: 'subscribe', + context: { + traits: { + phone: '1234567890', + }, + channel: 'web', + }, + properties: { + eventSetId: '7181537436256731137', + eventId: '1616318632825_352', + prop1: 'val1', + }, + type: 'track', + userId: 'eventIdn01', + timestamp: '2023-01-03', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_set_id: '7181537436256731137', + event_id: '1616318632825_352', + timestamp: '2023-01-03', + properties: { + event_channel: 'web', + }, + event: 'Subscribe', + partner_name: 'RudderStack', + context: { + user: { + phone_numbers: [ + 'c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646', + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + event_set_id: '7181537436256731137', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 3', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: true, + eventsToStandard: [ + { + from: 'RandomEvent', + to: 'SubmitForm', + }, + ], + }, + }, + message: { + event: 'RandomEvent', + context: { + traits: { + phone: '1234567890', + }, + channel: 'web', + }, + properties: { + eventSetId: '7185009018564395009', + eventId: '1616318632003_004', + prop1: 'val1', + }, + userId: 'eventIdn01', + timestamp: '2023-01-03', + type: 'track', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_set_id: '7185009018564395009', + event_id: '1616318632003_004', + timestamp: '2023-01-03', + properties: { + event_channel: 'web', + }, + event: 'SubmitForm', + partner_name: 'RudderStack', + context: { + user: { + phone_numbers: [ + 'c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646', + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + event_set_id: '7185009018564395009', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 4', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + hashUserProperties: true, + }, + }, + message: { + type: 'track', + userId: 'yash001', + originalTimestamp: '2019-10-14T09:03:17.562Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Access Token not found', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'TIKTOK_ADS_OFFLINE_EVENTS', + module: 'destination', + implementation: 'native', + feature: 'processor', + }, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 5', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: true, + }, + }, + message: { + event: 'subscribe', + context: { + traits: { + phone: '1234567890', + email: 'random@mail.com', + }, + channel: 'web', + }, + properties: { + eventSetId: '7181537436256731137', + eventId: '1616318632825_352', + products: [ + { + price: 8, + quantity: 2, + content_type: 'product1', + product_id: '1077218', + name: 'socks', + category: "Men's cloth", + }, + { + price: 18, + quantity: 12, + content_type: 'product2', + product_id: '1077219', + name: 'socks1', + category: "Men's cloth1", + }, + ], + }, + type: 'track', + userId: 'eventIdn01', + timestamp: '2023-01-03', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_set_id: '7181537436256731137', + event_id: '1616318632825_352', + timestamp: '2023-01-03', + properties: { + event_channel: 'web', + contents: [ + { + content_name: 'socks', + content_type: 'product1', + content_category: "Men's cloth", + content_id: '1077218', + price: 8, + quantity: 2, + }, + { + content_name: 'socks1', + content_type: 'product2', + content_category: "Men's cloth1", + content_id: '1077219', + price: 18, + quantity: 12, + }, + ], + }, + event: 'Subscribe', + partner_name: 'RudderStack', + context: { + user: { + emails: ['d9fcca64ec1b250da4261a3f89a8e0f7749c4e0f5a1a918e5397194c8b5a9f16'], + phone_numbers: [ + 'c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646', + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + event_set_id: '7181537436256731137', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'tiktok_ads_offline_events', + description: 'Test 6', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + accessToken: 'dummyAccessToken', + hashUserProperties: true, + eventsToStandard: [ + { + from: 'CompletePayment', + to: 'Purchase', + }, + ], + }, + }, + message: { + type: 'track', + event: 'CompletePayment', + sentAt: '2023-03-22T00:02:33.802Z', + traits: { + email: [ + 'efaaf5c8803af4fbf305d7a110c832673d89ed40983770329092fd04b0ba7900', + '078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f', + ], + phone: [ + 'c4994d14e724936f1169147dddf1673a09af69b55cc54bc695dbe246bd093b05', + '078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f', + ], + }, + userId: '60241286212', + channel: 'sources', + context: { + sources: { + job_id: '2N4WuoNQpGYmCPASUvnV86QyhY4/Syncher', + version: 'v1.20.0', + job_run_id: 'cgd4a063b2fn2e1j0q90', + task_run_id: 'cgd4a063b2fn2e1j0qa0', + }, + }, + recordId: '16322', + rudderId: '5b4ed73f-69aa-4198-88d1-3d4d509acbf1', + messageId: 'cgd4b663b2fn2e1j8th0', + timestamp: '2023-03-22T00:02:33.170Z', + properties: { + phone: 'c4994d14e724936f1169147dddf1673a09af69b55cc54bc695dbe246bd093b05', + value: 32.839999999999996, + emails: + '["efaaf5c8803af4fbf305d7a110c832673d89ed40983770329092fd04b0ba7900","078d6c8e19f24093368d1712d7801970467f59216f7ccc087bf81b91e0e1f68f","","","","","","","",""]', + eventId: '8965fb56-090f-47a5-aa7f-bbab22d9ec90', + currency: 'USD', + order_id: 60241286212, + eventSetId: '7211223771099742210', + event_name: 'CompletePayment', + }, + receivedAt: '2023-03-22T00:02:33.171Z', + request_ip: '10.7.78.187', + anonymousId: '60241286212', + originalTimestamp: '2023-03-22T00:02:33.802Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/track/', + headers: { + 'Access-Token': 'dummyAccessToken', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + event_set_id: '7211223771099742210', + event_id: '8965fb56-090f-47a5-aa7f-bbab22d9ec90', + timestamp: '2023-03-22T00:02:33.170Z', + properties: { + order_id: 60241286212, + currency: 'USD', + value: 32.839999999999996, + }, + event: 'Purchase', + partner_name: 'RudderStack', + context: { + user: { + emails: [ + '4dc75b075057df6f6b729e74a9feed1244dcf8ceb7903eaba13203f3268ae4b9', + '77b639edeb3cd6c801ea05176b8acbfa38d5f38490b764cd0c80756d0cf9ec68', + ], + phone_numbers: [ + '28b7b205c2936d2ded022d2587fb2677a76e560e921b3ad615b739b0238baa5d', + '77b639edeb3cd6c801ea05176b8acbfa38d5f38490b764cd0c80756d0cf9ec68', + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + event_set_id: '7211223771099742210', + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/tiktok_ads_offline_events/router/data.ts b/test/integrations/destinations/tiktok_ads_offline_events/router/data.ts index c479da741b..15b5f6674d 100644 --- a/test/integrations/destinations/tiktok_ads_offline_events/router/data.ts +++ b/test/integrations/destinations/tiktok_ads_offline_events/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'tiktok_ads_offline_events', description: 'Test 0', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -12,30 +10,20 @@ export const data = [ body: { input: [ { - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, message: { event: 'subscribe', - context: { - traits: { - phone: '1234567890', - }, - channel: 'web', - }, + context: { traits: { phone: '1234567890' }, channel: 'web' }, properties: { eventSetId: '7181537436256731137', eventId: '1616318632825_352', order_id: 'abc_xyz', shop_id: '123abc', currency: 'USD', - value: 46.0, + value: 46, price: 8, quantity: 2, content_type: 'product1234', @@ -49,22 +37,14 @@ export const data = [ }, }, { - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, message: { event: 'subscribe', context: { - traits: { - phone: '1234567890', - email: 'random@mail.com', - }, + traits: { phone: '1234567890', email: 'random@mail.com' }, channel: 'web', }, properties: { @@ -111,10 +91,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/batch/', - headers: { - 'Access-Token': 'dummyAccessToken', - 'Content-Type': 'application/json', - }, + headers: { 'Access-Token': 'dummyAccessToken', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -149,7 +126,7 @@ export const data = [ ], event_channel: 'web', currency: 'USD', - value: 46.0, + value: 46, }, }, { @@ -199,18 +176,11 @@ export const data = [ files: {}, }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, metadata: [ - { - jobId: 1, - }, - { - jobId: 2, - }, + { jobId: 1, userId: 'u1' }, + { jobId: 2, userId: 'u1' }, ], statusCode: 200, }, @@ -222,7 +192,7 @@ export const data = [ { name: 'tiktok_ads_offline_events', description: 'Test 1', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -230,28 +200,18 @@ export const data = [ body: { input: [ { - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, message: { event: 'subscribe', - context: { - traits: { - phone: '1234567890', - }, - channel: 'web', - }, + context: { traits: { phone: '1234567890' }, channel: 'web' }, properties: { eventSetId: '6071537445256731123', eventId: '1616318632825_352', currency: 'USD', - value: 46.0, + value: 46, price: 8, content_type: 'product1234', }, @@ -277,10 +237,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://business-api.tiktok.com/open_api/v1.3/offline/batch/', - headers: { - 'Access-Token': 'dummyAccessToken', - 'Content-Type': 'application/json', - }, + headers: { 'Access-Token': 'dummyAccessToken', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -301,15 +258,10 @@ export const data = [ }, }, properties: { - contents: [ - { - price: 8, - content_type: 'product1234', - }, - ], + contents: [{ price: 8, content_type: 'product1234' }], event_channel: 'web', currency: 'USD', - value: 46.0, + value: 46, }, }, ], @@ -321,16 +273,9 @@ export const data = [ files: {}, }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, ], @@ -341,7 +286,7 @@ export const data = [ { name: 'tiktok_ads_offline_events', description: 'Test 2', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -349,26 +294,13 @@ export const data = [ body: { input: [ { - metadata: { - jobId: 4, - }, + metadata: { jobId: 4, userId: 'u1' }, destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, message: { - context: { - traits: { - phone: '1234567890', - }, - channel: 'web', - }, - properties: { - eventSetId: '2345676543', - eventId: '1616318632825_352', - }, + context: { traits: { phone: '1234567890' }, channel: 'web' }, + properties: { eventSetId: '2345676543', eventId: '1616318632825_352' }, type: 'track', userId: 'eventIdn01', timestamp: '2023-01-03', @@ -386,18 +318,11 @@ export const data = [ output: [ { destination: { - Config: { - accessToken: 'dummyAccessToken', - hashUserProperties: true, - }, + Config: { accessToken: 'dummyAccessToken', hashUserProperties: true }, }, batched: false, error: 'Event name is required', - metadata: [ - { - jobId: 4, - }, - ], + metadata: [{ jobId: 4, userId: 'u1' }], statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', diff --git a/test/integrations/destinations/tiktok_audience/router/data.ts b/test/integrations/destinations/tiktok_audience/router/data.ts index c8a8b93d30..71e7038269 100644 --- a/test/integrations/destinations/tiktok_audience/router/data.ts +++ b/test/integrations/destinations/tiktok_audience/router/data.ts @@ -16,39 +16,22 @@ export const data = [ properties: { listData: { add: [ - { - EMAIL_SHA256: 'alex@email.com', - }, - { - EMAIL_SHA256: 'amy@abc.com', - }, - { - EMAIL_SHA256: 'van@abc.com', - }, + { EMAIL_SHA256: 'alex@email.com' }, + { EMAIL_SHA256: 'amy@abc.com' }, + { EMAIL_SHA256: 'van@abc.com' }, ], remove: [ - { - EMAIL_SHA256: 'alex@email.com', - }, - { - EMAIL_SHA256: 'amy@abc.com', - }, - { - EMAIL_SHA256: 'van@abc.com', - }, + { EMAIL_SHA256: 'alex@email.com' }, + { EMAIL_SHA256: 'amy@abc.com' }, + { EMAIL_SHA256: 'van@abc.com' }, ], }, }, context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, externalId: [ - { - type: 'TIKTOK_AUDIENCE-23856594064540489', - identifierType: 'EMAIL_SHA256', - }, + { type: 'TIKTOK_AUDIENCE-23856594064540489', identifierType: 'EMAIL_SHA256' }, ], destinationFields: 'EMAIL_SHA256', }, @@ -56,17 +39,11 @@ export const data = [ }, metadata: { jobId: 1, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -83,45 +60,22 @@ export const data = [ properties: { listData: { add: [ - { - EMAIL_SHA256: 'alex@email.com', - AAID_MD5: '1234567', - }, - { - EMAIL_SHA256: 'amy@abc.com', - AAID_MD5: '1234568', - }, - { - EMAIL_SHA256: 'van@abc.com', - AAID_MD5: '1234569', - }, + { EMAIL_SHA256: 'alex@email.com', AAID_MD5: '1234567' }, + { EMAIL_SHA256: 'amy@abc.com', AAID_MD5: '1234568' }, + { EMAIL_SHA256: 'van@abc.com', AAID_MD5: '1234569' }, ], remove: [ - { - EMAIL_SHA256: 'alex@email.com', - AAID_MD5: '1234570', - }, - { - EMAIL_SHA256: 'amy@abc.com', - AAID_MD5: '1234571', - }, - { - EMAIL_SHA256: 'van@abc.com', - AAID_MD5: '1234572', - }, + { EMAIL_SHA256: 'alex@email.com', AAID_MD5: '1234570' }, + { EMAIL_SHA256: 'amy@abc.com', AAID_MD5: '1234571' }, + { EMAIL_SHA256: 'van@abc.com', AAID_MD5: '1234572' }, ], }, }, context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, externalId: [ - { - type: 'TIKTOK_AUDIENCE-23856594064540489', - identifierType: 'EMAIL_SHA256', - }, + { type: 'TIKTOK_AUDIENCE-23856594064540489', identifierType: 'EMAIL_SHA256' }, ], destinationFields: 'EMAIL_SHA256, AAID_MD5', }, @@ -129,17 +83,11 @@ export const data = [ }, metadata: { jobId: 2, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -177,14 +125,9 @@ export const data = [ }, context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, externalId: [ - { - type: 'TIKTOK_AUDIENCE-23856594064540489', - identifierType: 'EMAIL_SHA256', - }, + { type: 'TIKTOK_AUDIENCE-23856594064540489', identifierType: 'EMAIL_SHA256' }, ], destinationFields: 'EMAIL_SHA256, PHONE_SHA256, IDFA_SHA256, AAID_SHA256, AAID_MD, IDFA_MD5', @@ -193,17 +136,11 @@ export const data = [ }, metadata: { jobId: 3, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -237,14 +174,9 @@ export const data = [ }, context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, externalId: [ - { - type: 'TIKTOK_AUDIENCE-23856594064540489', - identifierType: 'EMAIL_SHA256', - }, + { type: 'TIKTOK_AUDIENCE-23856594064540489', identifierType: 'EMAIL_SHA256' }, ], destinationFields: 'EMAIL_SHA256, PHONE_SHA256, IDFA_SHA256, AAID_SHA256, AAID_MD, IDFA_MD5', @@ -253,17 +185,11 @@ export const data = [ }, metadata: { jobId: 4, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -296,14 +222,9 @@ export const data = [ }, context: { ip: '14.5.67.21', - library: { - name: 'http', - }, + library: { name: 'http' }, externalId: [ - { - type: 'TIKTOK_AUDIENCE-23856594064540489', - identifierType: 'EMAIL_SHA256', - }, + { type: 'TIKTOK_AUDIENCE-23856594064540489', identifierType: 'EMAIL_SHA256' }, ], destinationFields: 'EMAIL_SHA256, PHONE_SHA256, IDFA_SHA256, AAID_SHA256, AAID_MD, IDFA_MD5', @@ -312,17 +233,11 @@ export const data = [ }, metadata: { jobId: 1524545, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -347,11 +262,7 @@ export const data = [ error: 'message Type is not present. Aborting message.', batched: false, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -363,10 +274,8 @@ export const data = [ metadata: [ { jobId: 1524545, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, ], statTags: { @@ -468,11 +377,7 @@ export const data = [ ], batched: true, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -484,10 +389,8 @@ export const data = [ metadata: [ { jobId: 1, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, ], statusCode: 200, @@ -605,11 +508,7 @@ export const data = [ ], batched: true, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -621,10 +520,8 @@ export const data = [ metadata: [ { jobId: 2, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, ], statusCode: 200, @@ -635,10 +532,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://business-api.tiktok.com/open_api/v1.3/segment/mapping/', - headers: { - 'Access-Token': 'dummyAccessToken', - 'Content-Type': 'application/json', - }, + headers: { 'Access-Token': 'dummyAccessToken', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -709,11 +603,7 @@ export const data = [ }, batched: true, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -725,10 +615,8 @@ export const data = [ metadata: [ { jobId: 3, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, ], statusCode: 200, @@ -739,10 +627,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: 'https://business-api.tiktok.com/open_api/v1.3/segment/mapping/', - headers: { - 'Access-Token': 'dummyAccessToken', - 'Content-Type': 'application/json', - }, + headers: { 'Access-Token': 'dummyAccessToken', 'Content-Type': 'application/json' }, params: {}, body: { JSON: { @@ -801,11 +686,7 @@ export const data = [ }, batched: true, destination: { - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, Config: { isHashRequired: true, registerDeviceOrBrowserApiKey: true, @@ -817,10 +698,8 @@ export const data = [ metadata: [ { jobId: 4, - secret: { - accessToken: 'dummyAccessToken', - advertiserIds: ['dummyAdverTiserID'], - }, + secret: { accessToken: 'dummyAccessToken', advertiserIds: ['dummyAdverTiserID'] }, + userId: 'u1', }, ], statusCode: 200, diff --git a/test/integrations/destinations/trengo/router/data.ts b/test/integrations/destinations/trengo/router/data.ts index eeefb053a8..f7b5022036 100644 --- a/test/integrations/destinations/trengo/router/data.ts +++ b/test/integrations/destinations/trengo/router/data.ts @@ -27,49 +27,25 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.1-beta.1', - }, + 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, - }, + 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: 'anon_id_success', - }, + traits: { anonymousId: 'anon_id_success' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)', }, event: 'Product Purchased', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: 'id1', - properties: { - name: 'Test Product', - phone: '9830311521', - }, + properties: { name: 'Test Product', phone: '9830311521' }, originalTimestamp: '2020-12-17T21:00:59.176Z', type: 'track', sentAt: '2020-03-12T09:05:03.421Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiToken: 'trengo_integration_test_api_token', @@ -77,29 +53,12 @@ export const data = [ channelIdentifier: 'phone', enableDedup: true, eventTemplateMap: [ - { - from: 'Product Purchased', - to: '{{event}} from Rudderstack', - }, - { - from: 'checkedOut', - to: 'Total cart value {{value}} shipped', - }, - { - from: 'Order Completed', - to: 'Completed Order', - }, - { - from: 'Stress Test', - }, - { - from: 'Stress test2', - to: '', - }, - { - from: 'Stress test3', - to: '{event} Stress test', - }, + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, ], }, secretConfig: {}, @@ -170,21 +129,14 @@ export const data = [ }, params: {}, body: { - JSON: { - contact_id: 90002431001, - channel_id: 'trengo_phone_channel', - }, + JSON: { contact_id: 90002431001, channel_id: 'trengo_phone_channel' }, XML: {}, JSON_ARRAY: {}, FORM: {}, }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -194,29 +146,12 @@ export const data = [ channelIdentifier: 'phone', enableDedup: true, eventTemplateMap: [ - { - from: 'Product Purchased', - to: '{{event}} from Rudderstack', - }, - { - from: 'checkedOut', - to: 'Total cart value {{value}} shipped', - }, - { - from: 'Order Completed', - to: 'Completed Order', - }, - { - from: 'Stress Test', - }, - { - from: 'Stress test2', - to: '', - }, - { - from: 'Stress test3', - to: '{event} Stress test', - }, + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, ], }, secretConfig: {}, @@ -283,10 +218,7 @@ export const data = [ userId: 'randomUserId', type: 'identify', context: { - traits: { - name: 'Jimothy Halpert', - email: 'j@d.com', - }, + traits: { name: 'Jimothy Halpert', email: 'j@d.com' }, ip: '14.5.67.21', app: { build: '1', @@ -301,33 +233,16 @@ export const data = [ name: 'generic_x86', type: 'android', }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '0.1.4', - }, + library: { name: 'com.rudderstack.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, - }, + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, timezone: 'Asia/Kolkata', }, timestamp: '2020-02-02T00:23:09.544Z', }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiToken: 'trengo_integration_test_api_token', @@ -335,29 +250,12 @@ export const data = [ channelIdentifier: 'email', enableDedup: true, eventTemplateMap: [ - { - from: 'Product Purchased', - to: '{{event}} from Rudderstack', - }, - { - from: 'checkedOut', - to: 'Total cart value {{value}} shipped', - }, - { - from: 'Order Completed', - to: 'Completed Order', - }, - { - from: 'Stress Test', - }, - { - from: 'Stress test2', - to: '', - }, - { - from: 'Stress test3', - to: '{event} Stress test', - }, + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, ], }, secretConfig: {}, @@ -439,11 +337,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -453,29 +347,12 @@ export const data = [ channelIdentifier: 'email', enableDedup: true, eventTemplateMap: [ - { - from: 'Product Purchased', - to: '{{event}} from Rudderstack', - }, - { - from: 'checkedOut', - to: 'Total cart value {{value}} shipped', - }, - { - from: 'Order Completed', - to: 'Completed Order', - }, - { - from: 'Stress Test', - }, - { - from: 'Stress test2', - to: '', - }, - { - from: 'Stress test3', - to: '{event} Stress test', - }, + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, ], }, secretConfig: {}, diff --git a/test/integrations/destinations/user/router/data.ts b/test/integrations/destinations/user/router/data.ts index 30bcdf2688..acdb5c953e 100644 --- a/test/integrations/destinations/user/router/data.ts +++ b/test/integrations/destinations/user/router/data.ts @@ -16,9 +16,7 @@ export const data = [ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36', }, - integrations: { - All: true, - }, + integrations: { All: true }, userId: 'user@123', groupId: 'group@795', messageId: '022bb90c-bbac-11e4-8dfc-aa07a5b093db', @@ -39,9 +37,7 @@ export const data = [ }, type: 'group', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, destination: { Config: { apiKey: 'dummyApiKey', @@ -77,10 +73,7 @@ export const data = [ body: { XML: {}, FORM: {}, - JSON: { - user_id: 52, - user_custom_id: 'user@123', - }, + JSON: { user_id: 52, user_custom_id: 'user@123' }, JSON_ARRAY: {}, }, type: 'REST', @@ -95,11 +88,7 @@ export const data = [ version: '1', endpoint: 'https://commander.user.com/api/public/companies/21/add_member/', }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -154,19 +143,10 @@ export const data = [ useroccupation: 'mechanical engineer', }, }, - traits: { - googleUrl: 'www.google.com', - }, - integrations: { - All: true, - user: { - lookup: 'email', - }, - }, - }, - metadata: { - jobId: 2, + traits: { googleUrl: 'www.google.com' }, + integrations: { All: true, user: { lookup: 'email' } }, }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { apiKey: 'dummyApiKey', @@ -229,11 +209,7 @@ export const data = [ version: '1', endpoint: 'https://commander.user.com/api/public/users/59/', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/userlist/router/data.ts b/test/integrations/destinations/userlist/router/data.ts new file mode 100644 index 0000000000..2f2d027865 --- /dev/null +++ b/test/integrations/destinations/userlist/router/data.ts @@ -0,0 +1,330 @@ +import { FEATURES } from '../../../../../src/v0/util/tags'; + +export const data = [ + { + name: 'userlist', + description: 'Test 0', + feature: FEATURES.ROUTER, + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + 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: 'test@rudderstack.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', + }, + metadata: { + jobId: 1, + }, + destination: { + Config: { + pushKey: 'userlist-push-key', + }, + }, + }, + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'test@rudderstack.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: '00000000000000000000000000', + 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', + }, + metadata: { + jobId: 2, + }, + destination: { + Config: { + pushKey: 'userlist-push-key', + }, + }, + }, + ], + destType: 'userlist', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + JSON: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + anonymousId: '123456', + email: 'test@rudderstack.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', + }, + FORM: {}, + }, + files: {}, + endpoint: 'https://incoming.userlist.com/rudderstack/events', + headers: { + Authorization: 'Push userlist-push-key', + 'Content-Type': 'application/json', + }, + version: '1', + params: {}, + type: 'REST', + method: 'POST', + statusCode: 200, + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + pushKey: 'userlist-push-key', + }, + }, + }, + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + JSON: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'test@rudderstack.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: '00000000000000000000000000', + 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', + }, + FORM: {}, + }, + files: {}, + endpoint: 'https://incoming.userlist.com/rudderstack/events', + headers: { + Authorization: 'Push userlist-push-key', + 'Content-Type': 'application/json', + }, + version: '1', + params: {}, + type: 'REST', + method: 'POST', + statusCode: 200, + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + pushKey: 'userlist-push-key', + }, + }, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/vero/router/data.ts b/test/integrations/destinations/vero/router/data.ts index 17aba359d1..ca23f22feb 100644 --- a/test/integrations/destinations/vero/router/data.ts +++ b/test/integrations/destinations/vero/router/data.ts @@ -1,10 +1,8 @@ -import { FEATURES } from '../../../../../src/v0/util/tags'; - export const data = [ { name: 'vero', description: 'Test 0', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -12,20 +10,10 @@ export const data = [ body: { input: [ { - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: { - jobId: 1, - }, + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: { jobId: 1, userId: 'u1' }, message: { - context: { - traits: { - email: 'user001@tech.com', - }, - }, + context: { traits: { email: 'user001@tech.com' } }, type: 'Identify', userId: 'user001', }, @@ -65,16 +53,8 @@ export const data = [ files: {}, }, ], - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: [ - { - jobId: 1, - }, - ], + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: [{ jobId: 1, userId: 'u1' }], statusCode: 200, }, ], @@ -85,7 +65,7 @@ export const data = [ { name: 'vero', description: 'Test 1', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -93,20 +73,10 @@ export const data = [ body: { input: [ { - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: { - jobId: 2, - }, + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: { jobId: 2, userId: 'u1' }, message: { - context: { - traits: { - email: 'user002@tech.com', - }, - }, + context: { traits: { email: 'user002@tech.com' } }, type: 'Identify', anonymousId: 'b4ffheww8eisndbdjgdewifewfgerwibderv', }, @@ -146,16 +116,8 @@ export const data = [ files: {}, }, ], - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: [ - { - jobId: 2, - }, - ], + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: [{ jobId: 2, userId: 'u1' }], statusCode: 200, }, ], @@ -166,7 +128,7 @@ export const data = [ { name: 'vero', description: 'Test 2', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -174,14 +136,8 @@ export const data = [ body: { input: [ { - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: { - jobId: 3, - }, + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: { jobId: 3, userId: 'u1' }, message: { context: { traits: { @@ -190,13 +146,7 @@ export const data = [ email: 'user005@tech.com', }, }, - integrations: { - vero: { - tags: { - add: ['a', 'b'], - }, - }, - }, + integrations: { vero: { tags: { add: ['a', 'b'] } } }, type: 'Identify', userId: 'fprediruser001', }, @@ -226,10 +176,7 @@ export const data = [ JSON: { id: 'fprediruser001', email: 'user005@tech.com', - data: { - address: 'Caravela Beach Goa', - homwTown: 'Mawsynram', - }, + data: { address: 'Caravela Beach Goa', homwTown: 'Mawsynram' }, auth_token: 'testAuthToken', }, JSON_ARRAY: {}, @@ -246,11 +193,7 @@ export const data = [ headers: {}, params: {}, body: { - JSON: { - auth_token: 'testAuthToken', - id: 'fprediruser001', - add: ['a', 'b'], - }, + JSON: { auth_token: 'testAuthToken', id: 'fprediruser001', add: ['a', 'b'] }, JSON_ARRAY: {}, XML: {}, FORM: {}, @@ -258,16 +201,8 @@ export const data = [ files: {}, }, ], - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: [ - { - jobId: 3, - }, - ], + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: [{ jobId: 3, userId: 'u1' }], statusCode: 200, }, ], @@ -278,7 +213,7 @@ export const data = [ { name: 'vero', description: 'Test 3', - feature: FEATURES.ROUTER, + feature: 'router', module: 'destination', version: 'v0', input: { @@ -286,21 +221,11 @@ export const data = [ body: { input: [ { - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: { - jobId: 4, - }, + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: { jobId: 4, userId: 'u1' }, message: { event: 'Random event with nonexisting userId and email', - properties: { - movieWatched: 3, - gamesPlayed: 4, - email: 'eventIdn02@sample.com', - }, + properties: { movieWatched: 3, gamesPlayed: 4, email: 'eventIdn02@sample.com' }, type: 'track', userId: 'eventIdn01', }, @@ -328,16 +253,9 @@ export const data = [ params: {}, body: { JSON: { - identity: { - id: 'eventIdn01', - email: 'eventIdn02@sample.com', - }, + identity: { id: 'eventIdn01', email: 'eventIdn02@sample.com' }, event_name: 'Random event with nonexisting userId and email', - data: { - movieWatched: 3, - gamesPlayed: 4, - email: 'eventIdn02@sample.com', - }, + data: { movieWatched: 3, gamesPlayed: 4, email: 'eventIdn02@sample.com' }, auth_token: 'testAuthToken', }, JSON_ARRAY: {}, @@ -347,16 +265,8 @@ export const data = [ files: {}, }, ], - destination: { - Config: { - authToken: 'testAuthToken', - }, - }, - metadata: [ - { - jobId: 4, - }, - ], + destination: { Config: { authToken: 'testAuthToken' } }, + metadata: [{ jobId: 4, userId: 'u1' }], statusCode: 200, }, ], diff --git a/test/integrations/destinations/webhook/router/data.ts b/test/integrations/destinations/webhook/router/data.ts index 291fc5ffba..a082eb12f1 100644 --- a/test/integrations/destinations/webhook/router/data.ts +++ b/test/integrations/destinations/webhook/router/data.ts @@ -19,25 +19,15 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { additional_bet_index: 0, @@ -100,28 +90,16 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, destination: { Config: { webhookUrl: 'http://6b0e6a60.ngrok.io', headers: [ - { - from: '', - to: '', - }, - { - from: 'test2', - to: 'value2', - }, + { from: '', to: '' }, + { from: 'test2', to: 'value2' }, ], }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, }, { @@ -134,25 +112,15 @@ export const data = [ model: 'Redmi 6', name: 'xiaomi', }, - network: { - carrier: 'Banglalink', - }, - os: { - name: 'android', - version: '8.1.0', - }, + network: { carrier: 'Banglalink' }, + os: { name: 'android', version: '8.1.0' }, traits: { - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, + address: { city: 'Dhaka', country: 'Bangladesh' }, anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', }, }, event: 'spin_result', - integrations: { - All: true, - }, + integrations: { All: true }, message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', properties: { additional_bet_index: 0, @@ -215,18 +183,10 @@ export const data = [ versionSessionCount: 2, }, }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 3, userId: 'u1' }, destination: { - Config: { - webhookUrl: 'https://6b0e6a60.ngrok.io/n', - }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + Config: { webhookUrl: 'https://6b0e6a60.ngrok.io/n' }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, }, ], @@ -267,9 +227,7 @@ export const data = [ versionSessionCount: 2, game_name: 'FireEagleSlots', }, - integrations: { - All: true, - }, + integrations: { All: true }, event: 'spin_result', message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', @@ -282,18 +240,10 @@ export const data = [ }, traits: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, - }, - os: { - version: '8.1.0', - name: 'android', - }, - network: { - carrier: 'Banglalink', + address: { city: 'Dhaka', country: 'Bangladesh' }, }, + os: { version: '8.1.0', name: 'android' }, + network: { carrier: 'Banglalink' }, }, type: 'track', properties: { @@ -340,41 +290,24 @@ export const data = [ files: {}, endpoint: 'http://6b0e6a60.ngrok.io', userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - headers: { - 'content-type': 'application/json', - test2: 'value2', - }, + headers: { 'content-type': 'application/json', test2: 'value2' }, version: '1', params: {}, type: 'REST', method: 'POST', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { Config: { webhookUrl: 'http://6b0e6a60.ngrok.io', headers: [ - { - from: '', - to: '', - }, - { - from: 'test2', - to: 'value2', - }, + { from: '', to: '' }, + { from: 'test2', to: 'value2' }, ], }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, }, { @@ -404,9 +337,7 @@ export const data = [ versionSessionCount: 2, game_name: 'FireEagleSlots', }, - integrations: { - All: true, - }, + integrations: { All: true }, event: 'spin_result', message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', @@ -419,18 +350,10 @@ export const data = [ }, traits: { anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - address: { - city: 'Dhaka', - country: 'Bangladesh', - }, - }, - os: { - version: '8.1.0', - name: 'android', - }, - network: { - carrier: 'Banglalink', + address: { city: 'Dhaka', country: 'Bangladesh' }, }, + os: { version: '8.1.0', name: 'android' }, + network: { carrier: 'Banglalink' }, }, type: 'track', properties: { @@ -477,30 +400,18 @@ export const data = [ files: {}, endpoint: 'https://6b0e6a60.ngrok.io/n', userId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - headers: { - 'content-type': 'application/json', - }, + headers: { 'content-type': 'application/json' }, version: '1', params: {}, type: 'REST', method: 'POST', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, statusCode: 200, destination: { - Config: { - webhookUrl: 'https://6b0e6a60.ngrok.io/n', - }, - DestinationDefinition: { - Config: { - cdkV2Enabled: true, - }, - }, + Config: { webhookUrl: 'https://6b0e6a60.ngrok.io/n' }, + DestinationDefinition: { Config: { cdkV2Enabled: true } }, }, }, ], diff --git a/test/integrations/destinations/woopra/router/data.ts b/test/integrations/destinations/woopra/router/data.ts index 5a3b20bea6..941f69c2fe 100644 --- a/test/integrations/destinations/woopra/router/data.ts +++ b/test/integrations/destinations/woopra/router/data.ts @@ -13,30 +13,15 @@ export const data = [ message: { anonymousId: '21e13f4bc7ceddad', context: { - app: { - build: '4', - name: 'RuddCDN', - }, - device: { - id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', - name: 'generic_x86_arm', - }, - os: { - name: 'Android', - version: '9', - }, + app: { build: '4', name: 'RuddCDN' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + os: { name: 'Android', version: '9' }, timezone: 'Asia/Kolkata', - traits: { - anonymousId: '21e13f4bc7ceddad', - }, + traits: { anonymousId: '21e13f4bc7ceddad' }, userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, - integrations: { - woopra: { - projectName: 'abc.com', - }, - }, + integrations: { woopra: { projectName: 'abc.com' } }, messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-28T19:53:31.900Z', traits: { @@ -52,14 +37,8 @@ export const data = [ timestamp: '2020-09-29T14:50:29.907+05:30', type: 'identify', }, - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: { - jobId: 1, - }, + destination: { Config: { projectName: 'int.com' } }, + metadata: { jobId: 1, userId: 'u1' }, }, ], destType: 'woopra', @@ -74,12 +53,7 @@ export const data = [ output: [ { batchedRequest: { - body: { - XML: {}, - FORM: {}, - JSON: {}, - JSON_ARRAY: {}, - }, + body: { XML: {}, FORM: {}, JSON: {}, JSON_ARRAY: {} }, type: 'REST', files: {}, method: 'GET', @@ -100,16 +74,8 @@ export const data = [ version: '1', endpoint: 'https://www.woopra.com/track/identify', }, - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: [ - { - jobId: 1, - }, - ], + destination: { Config: { projectName: 'int.com' } }, + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, }, @@ -133,49 +99,26 @@ export const data = [ anonymousId: '21e13f4bc7ceddad', channel: 'mobile', context: { - app: { - build: '4', - name: 'RuddCDN', - }, - device: { - id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', - name: 'generic_x86_arm', - }, - library: { - name: 'com.rudderstack.android.sdk.core', - version: '1.0.6', - }, - os: { - name: 'Android', - version: '9', - }, + app: { build: '4', name: 'RuddCDN' }, + device: { id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', name: 'generic_x86_arm' }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.6' }, + os: { name: 'Android', version: '9' }, timezone: 'Asia/Kolkata', userAgent: 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', }, event: 'First Investment', - integrations: { - woopra: 'int.com', - }, + integrations: { woopra: 'int.com' }, messageId: '1601322811899-d9c7dd00-50dc-4364-95c8-e89423eb3cfb', originalTimestamp: '2020-09-28T19:53:31.900Z', - properties: { - currency: 'EUR', - revenue: 20.37566, - }, + properties: { currency: 'EUR', revenue: 20.37566 }, receivedAt: '2020-09-29T14:50:43.005+05:30', sentAt: '2020-09-28T19:53:44.998Z', timestamp: '2020-09-29T14:50:29.907+05:30', type: 'track', }, - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: { - jobId: 2, - }, + destination: { Config: { projectName: 'int.com' } }, + metadata: { jobId: 2, userId: 'u1' }, }, ], destType: 'woopra', @@ -190,12 +133,7 @@ export const data = [ output: [ { batchedRequest: { - body: { - XML: {}, - FORM: {}, - JSON: {}, - JSON_ARRAY: {}, - }, + body: { XML: {}, FORM: {}, JSON: {}, JSON_ARRAY: {} }, type: 'REST', files: {}, method: 'GET', @@ -213,16 +151,8 @@ export const data = [ version: '1', endpoint: 'https://www.woopra.com/track/ce', }, - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: [ - { - jobId: 2, - }, - ], + destination: { Config: { projectName: 'int.com' } }, + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, }, @@ -246,19 +176,11 @@ export const data = [ anonymousId: '21e13f4bc7ceddad', channel: 'mobile', event: 'First Investment', - integrations: { - woopra: 'int.com', - }, + integrations: { woopra: 'int.com' }, type: 'group', }, - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: { - jobId: 3, - }, + destination: { Config: { projectName: 'int.com' } }, + metadata: { jobId: 3, userId: 'u1' }, }, ], destType: 'woopra', @@ -272,16 +194,8 @@ export const data = [ body: { output: [ { - destination: { - Config: { - projectName: 'int.com', - }, - }, - metadata: [ - { - jobId: 3, - }, - ], + destination: { Config: { projectName: 'int.com' } }, + metadata: [{ jobId: 3, userId: 'u1' }], statTags: { errorCategory: 'dataValidation', implementation: 'native', diff --git a/test/integrations/destinations/wootric/router/data.ts b/test/integrations/destinations/wootric/router/data.ts index 724ba176f2..9af28f4f48 100644 --- a/test/integrations/destinations/wootric/router/data.ts +++ b/test/integrations/destinations/wootric/router/data.ts @@ -1,1622 +1,1403 @@ export const data = [ - { - name: 'wootric', - description: 'Succesfull Idenitfy Call', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { + { + name: 'wootric', + description: 'Succesfull Idenitfy Call', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 1, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + 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: 'Bangalore', + name: 'Dummy User 2', + email: 'dummyUser2@gmail.com', + phone: '+19123456777', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 2, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + 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: 'Bangalore', + name: 'Dummy User 2', + phone: '+19123456777', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 3, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + 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: { + email: 'dummyUser2@gmail.com', + city: 'Bangalore', + name: 'Dummy User 2', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 5, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + 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, + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 6, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + 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: 'Mumbai', + name: 'Dummy User 1', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 7, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + 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: { email: 'dummyuser1_01@gmail.com' }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 8, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + 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: { phone: '+19777777778' }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 9, userId: 'u1' }, + message: { + type: 'identify', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + 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: 'Udaipur', + name: 'Dummy User 1 New', + title: 'SDE-2', + gender: 'Male', + company: 'Rudderstack', + }, + 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: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 10, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + channel: 'web', + properties: { + feedbackScore: 7, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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', + ip: '0.0.0.0', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + traits: { + city: 'Mumbai', + name: 'Dummy User 1', + email: 'dummyUser1@gmail.com', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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, Wootric: { eventType: 'create response' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 11, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + channel: 'web', + properties: { + feedbackScore: 7, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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', + ip: '0.0.0.0', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + 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, Wootric: { eventType: 'create response' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 12, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + channel: 'web', + properties: { + feedbackScore: 12, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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', + ip: '0.0.0.0', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + 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, Wootric: { eventType: 'create response' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 13, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + channel: 'web', + properties: { + feedbackScore: 9, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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, + }, + 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, Wootric: { eventType: 'create decline' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 14, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId2', + channel: 'web', + properties: { + feedbackScore: 9, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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, + }, + 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, Wootric: { eventType: 'create decline' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 15, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + channel: 'web', + properties: { + feedbackScore: 7, + feedbackText: 'Simple, Easy to use, Reliable, Affordable Product', + }, + 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', + ip: '0.0.0.0', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + traits: { + city: 'Mumbai', + name: 'Dummy User 1', + email: 'dummyUser1@gmail.com', + phone: '+19123456789', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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, Wootric: { eventType: 'random' } }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: { jobId: 16, userId: 'u1' }, + message: { + type: 'track', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'dummyId1', + channel: 'web', + properties: { feedbackScore: 3, feedbackText: 'Too Slow!!!' }, + 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', + ip: '0.0.0.0', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + traits: { + city: 'Mumbai', + name: 'Dummy User 1', + email: 'dummyUser1@gmail.com', + phone: '+19123456789', + title: 'SDE', + gender: 'Male', + company: 'Rudderstack', + createdAt: '2021-01-20T13:39:21.032Z', + }, + 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', + }, + }, + ], + destType: 'wootric', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.wootric.com/v1/end_users', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, body: { - input: [ - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 1 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "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": "Bangalore", - "name": "Dummy User 2", - "email": "dummyUser2@gmail.com", - "phone": "+19123456777", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 2 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "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": "Bangalore", - "name": "Dummy User 2", - "phone": "+19123456777", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 3 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "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": { - "email": "dummyUser2@gmail.com", - "city": "Bangalore", - "name": "Dummy User 2", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 5 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "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 - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 6 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "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": "Mumbai", - "name": "Dummy User 1", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 7 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "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": { - "email": "dummyuser1_01@gmail.com" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 8 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "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": { - "phone": "+19777777778" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 9 - }, - "message": { - "type": "identify", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "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": "Udaipur", - "name": "Dummy User 1 New", - "title": "SDE-2", - "gender": "Male", - "company": "Rudderstack" - }, - "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": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 10 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "channel": "web", - "properties": { - "feedbackScore": 7, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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", - "ip": "0.0.0.0", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 536, - "innerHeight": 689 - }, - "traits": { - "city": "Mumbai", - "name": "Dummy User 1", - "email": "dummyUser1@gmail.com", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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, - "Wootric": { - "eventType": "create response" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 11 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "channel": "web", - "properties": { - "feedbackScore": 7, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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", - "ip": "0.0.0.0", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 536, - "innerHeight": 689 - }, - "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, - "Wootric": { - "eventType": "create response" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 12 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "channel": "web", - "properties": { - "feedbackScore": 12, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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", - "ip": "0.0.0.0", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 536, - "innerHeight": 689 - }, - "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, - "Wootric": { - "eventType": "create response" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 13 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "channel": "web", - "properties": { - "feedbackScore": 9, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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 - }, - "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, - "Wootric": { - "eventType": "create decline" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 14 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId2", - "channel": "web", - "properties": { - "feedbackScore": 9, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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 - }, - "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, - "Wootric": { - "eventType": "create decline" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 15 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "channel": "web", - "properties": { - "feedbackScore": 7, - "feedbackText": "Simple, Easy to use, Reliable, Affordable Product" - }, - "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", - "ip": "0.0.0.0", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 536, - "innerHeight": 689 - }, - "traits": { - "city": "Mumbai", - "name": "Dummy User 1", - "email": "dummyUser1@gmail.com", - "phone": "+19123456789", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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, - "Wootric": { - "eventType": "random" - } - }, - "originalTimestamp": "2022-01-20T13:39:21.032Z" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": { - "jobId": 16 - }, - "message": { - "type": "track", - "sentAt": "2022-01-20T13:39:21.033Z", - "userId": "dummyId1", - "channel": "web", - "properties": { - "feedbackScore": 3, - "feedbackText": "Too Slow!!!" - }, - "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", - "ip": "0.0.0.0", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 536, - "innerHeight": 689 - }, - "traits": { - "city": "Mumbai", - "name": "Dummy User 1", - "email": "dummyUser1@gmail.com", - "phone": "+19123456789", - "title": "SDE", - "gender": "Male", - "company": "Rudderstack", - "createdAt": "2021-01-20T13:39:21.032Z" - }, - "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" - } - } - ] - , - destType: 'wootric', + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + email: 'dummyUser2@gmail.com', + phone_number: '+19123456777', + last_surveyed: '1642685961', + external_created_at: '1611149961', + external_id: 'dummyId2', + 'properties[city]': 'Bangalore', + 'properties[name]': 'Dummy User 2', + 'properties[title]': 'SDE', + 'properties[gender]': 'Male', + 'properties[company]': 'Rudderstack', + }, + }, + files: {}, + }, + metadata: [{ jobId: 1, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', method: 'POST', + endpoint: 'https://api.wootric.com/v1/end_users', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + phone_number: '+19123456777', + last_surveyed: '1642685961', + external_created_at: '1611149961', + external_id: 'dummyId2', + 'properties[city]': 'Bangalore', + 'properties[name]': 'Dummy User 2', + 'properties[title]': 'SDE', + 'properties[gender]': 'Male', + 'properties[company]': 'Rudderstack', + }, + }, + files: {}, + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, }, - }, - output: { - response: { - status: 200, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.wootric.com/v1/end_users', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + email: 'dummyUser2@gmail.com', + last_surveyed: '1642685961', + external_created_at: '1611149961', + external_id: 'dummyId2', + 'properties[city]': 'Bangalore', + 'properties[name]': 'Dummy User 2', + 'properties[title]': 'SDE', + 'properties[gender]': 'Male', + 'properties[company]': 'Rudderstack', + }, + }, + files: {}, + }, + metadata: [{ jobId: 3, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: [{ jobId: 5, userId: 'u1' }], + batched: false, + statusCode: 400, + error: 'email/phone number are missing. At least one parameter must be provided', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: [{ jobId: 6, userId: 'u1' }], + batched: false, + statusCode: 400, + error: 'email/phone number are missing. At least one parameter must be provided', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.wootric.com/v1/end_users/486438462', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { email: 'dummyuser1_01@gmail.com', last_surveyed: '1642685961' }, + }, + files: {}, + }, + metadata: [{ jobId: 7, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.wootric.com/v1/end_users/486438462', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { phone_number: '+19777777778', last_surveyed: '1642685961' }, + }, + files: {}, + }, + metadata: [{ jobId: 8, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: 'https://api.wootric.com/v1/end_users/486438462', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + last_surveyed: '1642685961', + 'properties[city]': 'Udaipur', + 'properties[name]': 'Dummy User 1 New', + 'properties[title]': 'SDE-2', + 'properties[gender]': 'Male', + 'properties[company]': 'Rudderstack', + }, + }, + files: {}, + }, + metadata: [{ jobId: 9, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.wootric.com/v1/end_users/486438462/responses', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + score: 7, + ip_address: '0.0.0.0', + origin_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + text: 'Simple, Easy to use, Reliable, Affordable Product', + created_at: '1611149961', + 'end_user[properties][city]': 'Mumbai', + 'end_user[properties][name]': 'Dummy User 1', + 'end_user[properties][title]': 'SDE', + 'end_user[properties][gender]': 'Male', + 'end_user[properties][company]': 'Rudderstack', + }, + }, + files: {}, + }, + metadata: [{ jobId: 10, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + metadata: [{ jobId: 11, userId: 'u1' }], + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + batched: false, + statusCode: 400, + error: 'No user found with userId : dummyId2', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: [{ jobId: 12, userId: 'u1' }], + batched: false, + statusCode: 400, + error: 'Invalid Score', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.wootric.com/v1/end_users/486438462/declines', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Authorization: + 'Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c', + }, + params: {}, body: { - output: [ - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.wootric.com/v1/end_users", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "email": "dummyUser2@gmail.com", - "phone_number": "+19123456777", - "last_surveyed": "1642685961", - "external_created_at": "1611149961", - "external_id": "dummyId2", - "properties[city]": "Bangalore", - "properties[name]": "Dummy User 2", - "properties[title]": "SDE", - "properties[gender]": "Male", - "properties[company]": "Rudderstack" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 1 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.wootric.com/v1/end_users", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "phone_number": "+19123456777", - "last_surveyed": "1642685961", - "external_created_at": "1611149961", - "external_id": "dummyId2", - "properties[city]": "Bangalore", - "properties[name]": "Dummy User 2", - "properties[title]": "SDE", - "properties[gender]": "Male", - "properties[company]": "Rudderstack" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 2 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.wootric.com/v1/end_users", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "email": "dummyUser2@gmail.com", - "last_surveyed": "1642685961", - "external_created_at": "1611149961", - "external_id": "dummyId2", - "properties[city]": "Bangalore", - "properties[name]": "Dummy User 2", - "properties[title]": "SDE", - "properties[gender]": "Male", - "properties[company]": "Rudderstack" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 3 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": [ - { - "jobId": 5 - } - ], - "batched": false, - "statusCode": 400, - "error": "email/phone number are missing. At least one parameter must be provided", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": [ - { - "jobId": 6 - } - ], - "batched": false, - "statusCode": 400, - "error": "email/phone number are missing. At least one parameter must be provided", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.wootric.com/v1/end_users/486438462", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "email": "dummyuser1_01@gmail.com", - "last_surveyed": "1642685961" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 7 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.wootric.com/v1/end_users/486438462", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "phone_number": "+19777777778", - "last_surveyed": "1642685961" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 8 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "PUT", - "endpoint": "https://api.wootric.com/v1/end_users/486438462", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "last_surveyed": "1642685961", - "properties[city]": "Udaipur", - "properties[name]": "Dummy User 1 New", - "properties[title]": "SDE-2", - "properties[gender]": "Male", - "properties[company]": "Rudderstack" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 9 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.wootric.com/v1/end_users/486438462/responses", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "score": 7, - "ip_address": "0.0.0.0", - "origin_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html", - "text": "Simple, Easy to use, Reliable, Affordable Product", - "created_at": "1611149961", - "end_user[properties][city]": "Mumbai", - "end_user[properties][name]": "Dummy User 1", - "end_user[properties][title]": "SDE", - "end_user[properties][gender]": "Male", - "end_user[properties][company]": "Rudderstack" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 10 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "metadata": [ - { - "jobId": 11 - } - ], - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "batched": false, - "statusCode": 400, - "error": "No user found with userId : dummyId2", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": [ - { - "jobId": 12 - } - ], - "batched": false, - "statusCode": 400, - "error": "Invalid Score", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "batchedRequest": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.wootric.com/v1/end_users/486438462/declines", - "headers": { - "Content-Type": "application/x-www-form-urlencoded", - "Authorization": "Bearer 2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c" - }, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": { - "origin_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html" - } - }, - "files": {} - }, - "metadata": [ - { - "jobId": 13 - } - ], - "batched": false, - "statusCode": 200, - "destination": { - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG", - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - } - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": [ - { - "jobId": 14 - } - ], - "batched": false, - "statusCode": 400, - "error": "No user found with userId : dummyId2", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "metadata": [ - { - "jobId": 15 - } - ], - "batched": false, - "statusCode": 400, - "error": "Event Type not supported", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - }, - { - "metadata": [ - { - "jobId": 16 - } - ], - "destination": { - "Config": { - "username": "wootricfakeuser@example.com", - "password": "password@123", - "accountToken": "NPS-dummyToken" - }, - "ID": "2D7TqLto9tnkBuR1ciMrbiA4cbG" - }, - "batched": false, - "statusCode": 400, - "error": "Event Type is missing from Integration object", - "statTags": { - "destType": "WOOTRIC", - "feature": "router", - "implementation": "native", - "module": "destination", - "errorCategory": "dataValidation", - "errorType": "instrumentation" - } - } - ], + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: { + origin_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + }, + }, + files: {}, + }, + metadata: [{ jobId: 13, userId: 'u1' }], + batched: false, + statusCode: 200, + destination: { + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: [{ jobId: 14, userId: 'u1' }], + batched: false, + statusCode: 400, + error: 'No user found with userId : dummyId2', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', + }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + metadata: [{ jobId: 15, userId: 'u1' }], + batched: false, + statusCode: 400, + error: 'Event Type not supported', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + }, + { + metadata: [{ jobId: 16, userId: 'u1' }], + destination: { + Config: { + username: 'wootricfakeuser@example.com', + password: 'password@123', + accountToken: 'NPS-dummyToken', }, + ID: '2D7TqLto9tnkBuR1ciMrbiA4cbG', + }, + batched: false, + statusCode: 400, + error: 'Event Type is missing from Integration object', + statTags: { + destType: 'WOOTRIC', + feature: 'router', + implementation: 'native', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, }, + ], }, - } + }, + }, + }, ]; diff --git a/test/integrations/destinations/yahoo_dsp/router/data.ts b/test/integrations/destinations/yahoo_dsp/router/data.ts index 59c71b300c..61b1b728a5 100644 --- a/test/integrations/destinations/yahoo_dsp/router/data.ts +++ b/test/integrations/destinations/yahoo_dsp/router/data.ts @@ -23,9 +23,7 @@ export const data = [ }, ID: 'iwehr83843', }, - metadata: { - jobId: 1, - }, + metadata: { jobId: 1, userId: 'u1' }, message: { userId: 'user 1', type: 'audiencelist', @@ -75,12 +73,7 @@ export const data = [ }, enablePartialFailure: true, }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, + context: { ip: '14.5.67.21', library: { name: 'http' } }, timestamp: '2020-02-02T00:23:09.544Z', }, }, @@ -123,11 +116,7 @@ export const data = [ }, files: {}, }, - metadata: [ - { - jobId: 1, - }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: false, statusCode: 200, destination: { diff --git a/test/integrations/destinations/zendesk/router/data.ts b/test/integrations/destinations/zendesk/router/data.ts index d99ca6df03..4e7aacd1d1 100644 --- a/test/integrations/destinations/zendesk/router/data.ts +++ b/test/integrations/destinations/zendesk/router/data.ts @@ -30,9 +30,7 @@ export const data = [ Name: 'zendesk', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: '297b0750-934b-4411-b66c-9b418cdbc0c9', channel: 'web', @@ -44,28 +42,15 @@ export const data = [ version: '1.1.0-beta.2', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.0-beta.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.0-beta.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - email: 'example124@email.com', - name: 'abcd124', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + traits: { email: 'example124@email.com', name: 'abcd124' }, 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', }, - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '0bab70e8-bf2f-449a-a19b-ca6e3bfed9b7', originalTimestamp: '2020-03-23T18:27:28.98Z', receivedAt: '2020-03-23T23:57:29.022+05:30', @@ -108,9 +93,7 @@ export const data = [ email: 'example124@email.com', name: 'abcd124', external_id: 'abcd-124', - user_fields: { - id: 'abcd-124', - }, + user_fields: { id: 'abcd-124' }, verified: true, }, }, @@ -122,11 +105,7 @@ export const data = [ userId: '297b0750-934b-4411-b66c-9b418cdbc0c9', }, ], - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -186,9 +165,7 @@ export const data = [ Name: 'zendesk', Transformations: [], }, - metadata: { - jobId: 2, - }, + metadata: { jobId: 2, userId: 'u1' }, message: { anonymousId: '297b0750-934b-4411-b66c-9b418cdbc0c9', channel: 'web', @@ -200,29 +177,16 @@ export const data = [ version: '1.1.0-beta.2', }, ip: '0.0.0.0', - library: { - name: 'RudderLabs JavaScript SDK', - version: '1.1.0-beta.2', - }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.0-beta.2' }, locale: 'en-GB', - os: { - name: '', - version: '', - }, - screen: { - density: 2, - }, - traits: { - email: 'example124@email.com', - name: 'abcd124', - }, + os: { name: '', version: '' }, + screen: { density: 2 }, + traits: { email: 'example124@email.com', name: 'abcd124' }, 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-124', - integrations: { - All: true, - }, + integrations: { All: true }, messageId: '2d54ba80-ce5f-4bcb-b1d7-7587e7a865fc', originalTimestamp: '2020-03-23T18:27:28.983Z', receivedAt: '2020-03-23T23:57:29.022+05:30', @@ -277,11 +241,7 @@ export const data = [ files: {}, userId: '297b0750-934b-4411-b66c-9b418cdbc0c9', }, - metadata: [ - { - jobId: 2, - }, - ], + metadata: [{ jobId: 2, userId: 'u1' }], batched: false, statusCode: 200, destination: { @@ -340,9 +300,7 @@ export const data = [ Name: 'zendesk', Transformations: [], }, - metadata: { - jobId: 3, - }, + metadata: { jobId: 3, userId: 'u1' }, message: { anonymousId: '223b5f40-9543-4456-a7aa-945c43048185', channel: 'web', @@ -393,11 +351,7 @@ export const data = [ module: 'destination', }, statusCode: 400, - metadata: [ - { - jobId: 3, - }, - ], + metadata: [{ jobId: 3, userId: 'u1' }], batched: false, destination: { Config: { diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index f5be8107ed..09f3a82d40 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -4,7 +4,10 @@ import { MockHttpCallsData, TestCaseData } from './testTypes'; import MockAdapter from 'axios-mock-adapter'; import isMatch from 'lodash/isMatch'; import { OptionValues } from 'commander'; +import { removeUndefinedAndNullValues } from '@rudderstack/integrations-lib'; +const generateAlphanumericId = (size = 36) => + [...Array(size)].map(() => ((Math.random() * size) | 0).toString(size)).join(''); export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): string[] => { const globPattern = join(dirPath, '**', 'data.ts'); let testFilePaths = globSync(globPattern); @@ -74,3 +77,290 @@ export const overrideDestination = (destination, overrideConfigValues) => { Config: { ...destination.Config, ...overrideConfigValues }, }); }; + +export const generateIndentifyPayload = (parametersOverride: any) => { + const payload = { + type: 'identify', + sentAt: parametersOverride.sentAt || '2021-01-03T17:02:53.195Z', + userId: parametersOverride.userId || 'default-userId', + channel: 'web', + context: removeUndefinedAndNullValues({ + externalId: parametersOverride.externalId, + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: parametersOverride.context.traits, + 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', + }), + traits: parametersOverride.traits, + integrations: parametersOverride.integrations, + rudderId: parametersOverride.rudderId || generateAlphanumericId(36), + messageId: parametersOverride.messageId || generateAlphanumericId(36), + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + originalTimestamp: parametersOverride.originalTimestamp || '2021-01-03T17:02:53.193Z', + }; + + return removeUndefinedAndNullValues(payload); +}; + +export const generateSimplifiedIdentifyPayload = (parametersOverride: any) => { + return removeUndefinedAndNullValues({ + type: 'identify', + sentAt: parametersOverride.sentAt || '2021-01-03T17:02:53.195Z', + userId: parametersOverride.userId || 'default-userId', + traits: parametersOverride.traits, + integrations: parametersOverride.integrations, + rudderId: parametersOverride.rudderId || generateAlphanumericId(36), + messageId: parametersOverride.messageId || generateAlphanumericId(36), + context: { + externalId: parametersOverride.externalId, + traits: parametersOverride.context.traits, + }, + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + originalTimestamp: parametersOverride.originalTimestamp || '2021-01-03T17:02:53.193Z', + }); +}; + +export const generateTrackPayload = (parametersOverride: any) => { + const payload = { + type: 'track', + sentAt: parametersOverride.sentAt || '2021-01-03T17:02:53.195Z', + userId: parametersOverride.userId || 'default-user-id', + channel: 'web', + context: removeUndefinedAndNullValues({ + externalId: parametersOverride.externalId, + os: { name: '', version: '1.12.3' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: parametersOverride.context.traits, + 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: parametersOverride.rudderId || generateAlphanumericId(36), + messageId: parametersOverride.messageId || generateAlphanumericId(36), + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + originalTimestamp: parametersOverride.originalTimestamp || '2021-01-03T17:02:53.193Z', + timestamp: parametersOverride.timestamp, + event: parametersOverride.event || 'test-event', + integrations: parametersOverride.integrations, + properties: parametersOverride.properties, + }; + return removeUndefinedAndNullValues(payload); +}; + +export const generateSimplifiedTrackPayload = (parametersOverride: any) => { + return removeUndefinedAndNullValues({ + type: 'track', + sentAt: parametersOverride.sentAt || '2021-01-03T17:02:53.195Z', + userId: parametersOverride.userId || 'default-user-id', + event: parametersOverride.event || 'test-event', + properties: parametersOverride.properties, + integrations: parametersOverride.integrations, + rudderId: parametersOverride.rudderId || generateAlphanumericId(36), + messageId: parametersOverride.messageId || generateAlphanumericId(36), + context: removeUndefinedAndNullValues({ + externalId: parametersOverride.externalId, + traits: parametersOverride.context.traits, + }), + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + originalTimestamp: parametersOverride.originalTimestamp || '2021-01-03T17:02:53.193Z', + }); +}; + +export const generatePageOrScreenPayload = (parametersOverride: any, eventType: string) => { + const payload = { + channel: 'web', + userId: parametersOverride.userId || 'default-userId', + rudderId: parametersOverride.rudderId || generateAlphanumericId(36), + originalTimestamp: parametersOverride.originalTimestamp || '2022-04-26T05:17:09Z', + timestamp: parametersOverride.timestamp, + context: removeUndefinedAndNullValues({ + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + device: { + adTrackingEnabled: 'false', + advertisingId: 'T0T0T072-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: parametersOverride.context.traits, + externalId: parametersOverride.externalId, + 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: parametersOverride.event, + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + properties: parametersOverride.properties, + type: eventType || 'page', + integrations: parametersOverride.integrations, + sentAt: '2022-04-20T15:20:57Z', + }; + + return removeUndefinedAndNullValues(payload); +}; + +export const generateSimplifiedPageOrScreenPayload = ( + parametersOverride: any, + eventType: string, +) => { + return removeUndefinedAndNullValues({ + channel: 'web', + userId: parametersOverride.userId || 'default-userId', + type: eventType || 'page', + event: parametersOverride.event, + properties: parametersOverride.properties, + integrations: parametersOverride.integrations, + rudderId: parametersOverride.rudderId || generateAlphanumericId(36), + context: removeUndefinedAndNullValues({ + externalId: parametersOverride.externalId, + traits: parametersOverride.context.traits, + }), + timestamp: parametersOverride.timestamp, + anonymousId: parametersOverride.anonymousId || 'default-anonymousId', + originalTimestamp: parametersOverride.originalTimestamp || '2022-04-26T05:17:09Z', + }); +}; + +export const generateGroupPayload = (parametersOverride: any) => { + const payload = { + channel: 'web', + context: removeUndefinedAndNullValues({ + 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, + }, + traits: parametersOverride.context.traits, + externalId: parametersOverride.externalId, + }), + messageId: parametersOverride.messageId || generateAlphanumericId(36), + session_id: parametersOverride.session_id || generateAlphanumericId(36), + originalTimestamp: parametersOverride.originalTimestamp || '2019-10-14T09:03:17.562Z', + timestamp: parametersOverride.timestamp, + anonymousId: parametersOverride.anonymousId || generateAlphanumericId(36), + userId: parametersOverride.userId || 'default-user-id', + type: 'group', + groupId: parametersOverride.groupId, + traits: parametersOverride.traits, + integrations: parametersOverride.integrations, + sentAt: parametersOverride.sentAt || '2019-10-14T09:03:22.563Z', + }; + return removeUndefinedAndNullValues(payload); +}; + +export const generateSimplifiedGroupPayload = (parametersOverride: any) => { + return removeUndefinedAndNullValues({ + channel: 'web', + userId: parametersOverride.userId || 'default-userId', + type: 'group', + groupId: parametersOverride.groupId, + traits: parametersOverride.traits, + integrations: parametersOverride.integrations, + context: removeUndefinedAndNullValues({ + externalId: parametersOverride.externalId, + traits: parametersOverride.context.traits, + }), + timestamp: parametersOverride.timestamp, + anonymousId: parametersOverride.anonymousId || generateAlphanumericId(36), + originalTimestamp: parametersOverride.originalTimestamp || '2019-10-14T09:03:17.562Z', + }); +}; + +export const transformResultBuilder = (matchData) => { + return removeUndefinedAndNullValues({ + version: '1', + type: 'REST', + userId: matchData.userId, + method: matchData.method || 'POST', + endpoint: matchData.endpoint || '', + headers: matchData.headers || {}, + params: matchData.params || {}, + body: { + JSON: matchData.JSON || {}, + JSON_ARRAY: matchData.JSON_ARRAY || {}, + XML: matchData.XML || {}, + FORM: matchData.FORM || {}, + }, + files: matchData.files || {}, + }); +}; + +export const compareObjects = (obj1, obj2, logPrefix = '', differences: string[] = []) => { + for (const key in obj1) { + if (obj1.hasOwnProperty(key)) { + const fullKey = logPrefix ? `${logPrefix}.${key}` : key; + + if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') { + compareObjects(obj1[key], obj2[key], fullKey, differences); + } else if (obj1[key] !== obj2[key]) { + differences.push(fullKey); + } + } + } + + // Check for keys in obj2 that are not present in obj1 + for (const key in obj2) { + if (obj2.hasOwnProperty(key) && !obj1.hasOwnProperty(key)) { + const fullKey = logPrefix ? `${logPrefix}.${key}` : key; + differences.push(fullKey); + } + } + + return differences; +}; diff --git a/test/testHelper.js b/test/testHelper.js index 5fe97fed67..f0297c0574 100644 --- a/test/testHelper.js +++ b/test/testHelper.js @@ -15,11 +15,71 @@ const setResponsesForMockAxiosAdapter = ({url, method, data, options}, {response if (data) { reqObj.data = data } - responses.push(`{httpReq: ${JSON.stringify(reqObj)},httpRes: ${JSON.stringify(response)}},`) + responses.push(`{httpReq: ${JSON.stringify(reqObj)},httpRes: ${JSON.stringify(response)}},`) } } + +const assertRouterOutput = (output, input) => { + if (!Array.isArray(output) || !Array.isArray(input)) { + return + } + + const returnedJobids = {}; + output.forEach((outEvent) => { + //Assert that metadata is present and is an array + const metadata = outEvent.metadata; + expect(Array.isArray(metadata)).toEqual(true); + + //Assert that statusCode is present and is a number between 200 and 600 + const statusCode = outEvent.statusCode; + expect(statusCode).toBeDefined(); + expect(typeof statusCode === 'number').toEqual(true); + const validStatusCode = statusCode >= 200 && statusCode < 600; + expect(validStatusCode).toEqual(true); + + //Assert that every job_id in the input is present in the output one and only one time. + metadata.forEach((meta) => { + const jobId = meta.jobId; + expect(returnedJobids[jobId]).toBeUndefined(); + returnedJobids[jobId] = true; + }); + }); + + const inputJobids = {}; + input.forEach((input) => { + const jobId = input.metadata.jobId; + inputJobids[jobId] = true; + }); + + expect(returnedJobids).toEqual(inputJobids); + + let userIdJobIdMap = {}; + output.forEach((outEvent) => { + //Events with statusCode 400-499 are skipped. They are not sent to the destination. + if (outEvent.statusCode < 400 || outEvent.statusCode > 499) { + const metadata = outEvent.metadata; + metadata.forEach((meta) => { + const jobId = meta.jobId; + const userId = meta.userId; + let arr = userIdJobIdMap[userId] || []; + arr.push(jobId); + userIdJobIdMap[userId] = arr; + }); + } + }); + + //The jobids for a user should be in order. If not, there is an issue. + Object.keys(userIdJobIdMap).forEach((userId) => { + const jobIds = userIdJobIdMap[userId]; + for (let i = 0; i < jobIds.length - 1; i++) { + expect(jobIds[i] < jobIds[i + 1]).toEqual(true); + } + }); +}; + module.exports = { getFuncTestData, responses, - setResponsesForMockAxiosAdapter + setResponsesForMockAxiosAdapter, + assertRouterOutput }; From f2fa0056741094deaadf30596bb9be48d685e610 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 25 Jan 2024 09:22:39 +0530 Subject: [PATCH 08/13] chore: pr conflicts resolved --- test/integrations/destinations/intercom/router/data.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 5ee531ff75..7ec8c66333 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -25,6 +25,7 @@ export const data = [ }, }, type: 'identify', + integrations: { All: true }, originalTimestamp: '2023-11-10T14:42:44.724Z', timestamp: '2023-11-22T10:12:44.757+05:30', }, From 3522b58d09511bc3c338988b85304bccb7fc2e15 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 25 Jan 2024 15:31:05 +0530 Subject: [PATCH 09/13] chore: added step to check value of apiVersion --- .../destinations/intercom/procWorkflow.yaml | 31 +++++++++++-------- src/cdk/v2/destinations/intercom/utils.js | 19 +++++++----- .../v2/destinations/intercom/utils.test.js | 4 ++- .../destinations/intercom/processor/data.ts | 2 -- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index a96bb0aae0..10b3396759 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -35,6 +35,11 @@ steps: $.assert(messageType in {{$.EventType.([.IDENTIFY, .TRACK, .GROUP])}}, "message type " + messageType + " is not supported"); $.assertConfig(.destination.Config.apiKey, "Access Token is not present. Aborting"); + - name: apiVersion + template: | + const version = $.isDefinedAndNotNull(.destination.Config.apiVersion) ? .destination.Config.apiVersion : "1.4"; + version; + - name: rEtlPayload condition: .message.context.mappedToDestination === true template: | @@ -43,13 +48,13 @@ steps: payload; - name: searchContact - condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && .destination.Config.apiVersion === "latest" + condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && $.outputs.apiVersion !== "1.4" template: | const contactId = await $.searchContact(.message, .destination); contactId; - name: identifyTransformationForLatestVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "latest" && !.message.context.mappedToDestination + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "1.4" && !.message.context.mappedToDestination template: | const payload = .message.({ external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, @@ -66,7 +71,7 @@ steps: payload; - name: identifyPayloadForLatestVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "latest" + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "1.4" template: | const payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForLatestVersion; payload.name = $.getName(.message); @@ -81,7 +86,7 @@ steps: $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - name: identifyTransformationForOlderVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "1.4" && !.message.context.mappedToDestination + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "1.4" && !.message.context.mappedToDestination template: | const payload = .message.({ user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, @@ -94,7 +99,7 @@ steps: payload; - name: identifyPayloadForOlderVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && .destination.Config.apiVersion === "1.4" + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "1.4" template: | let payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForOlderVersion; payload = { @@ -124,9 +129,9 @@ steps: email: {{{{$.getGenericPaths("email")}}}}, metadata: .properties }); - .destination.Config.apiVersion === "latest" ? payload.id = .message.properties.id || .message.traits.id; - .destination.Config.apiVersion === "latest" ? payload.created_at = $.toSeconds(timestamp); - .destination.Config.apiVersion === "1.4" ? payload.created = $.toSeconds(timestamp); + $.outputs.apiVersion !== "1.4" ? payload.id = .message.properties.id || .message.traits.id; + $.outputs.apiVersion !== "1.4" ? payload.created_at = $.toSeconds(timestamp); + $.outputs.apiVersion === "1.4" ? payload.created = $.toSeconds(timestamp); !(payload.user_id) && .destination.Config.sendAnonymousId ? payload.user_id = .message.anonymousId; payload; @@ -158,7 +163,7 @@ steps: payload; - name: groupPayloadForLatestVersion - condition: $.outputs.messageType === {{$.EventType.GROUP}} && .destination.Config.apiVersion === "latest" + condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion !== "1.4" steps: - name: validateMessageAndPreparePayload template: | @@ -187,7 +192,7 @@ steps: $.removeUndefinedAndNullValues($.context.payload); - name: groupPayloadForOlderVersion - condition: $.outputs.messageType === {{$.EventType.GROUP}} && .destination.Config.apiVersion === "1.4" + condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion === "1.4" template: | $.context.response = []; const response = $.defaultRequestConfig(); @@ -199,7 +204,7 @@ steps: payload.custom_attributes = $.filterCustomAttributes(payload, "company", .destination); response.body.JSON = $.removeUndefinedAndNullValues(payload); response.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; - response.headers = $.getHeaders(.destination); + response.headers = $.getHeaders(.destination, $.outputs.apiVersion); response.method = "POST"; response.userId = .message.anonymousId; $.context.response.push(response); @@ -220,6 +225,6 @@ steps: response.body.JSON = $.context.payload; response.endpoint = $.context.endpoint; response.method = $.context.requestMethod; - response.headers = $.getHeaders(.destination); - .destination.Config.apiVersion === "1.4" && $.outputs.messageType !== {{$.EventType.GROUP}} ? response.userId = .message.anonymousId; + response.headers = $.getHeaders(.destination, $.outputs.apiVersion); + $.outputs.apiVersion === "1.4" && $.outputs.messageType !== {{$.EventType.GROUP}} ? response.userId = .message.anonymousId; response; diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 126fa6588d..8a26a1762a 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -32,13 +32,14 @@ const { /** * Returns destination request headers * @param {*} destination + * @param {*} apiVersion * @returns */ -const getHeaders = (destination) => ({ +const getHeaders = (destination, apiVersion) => ({ 'Content-Type': JSON_MIME_TYPE, Authorization: `Bearer ${destination.Config.apiKey}`, Accept: JSON_MIME_TYPE, - 'Intercom-Version': destination.Config.apiVersion === '1.4' ? '1.4' : '2.10', + 'Intercom-Version': apiVersion === '1.4' ? '1.4' : '2.10', }); /** @@ -47,7 +48,9 @@ const getHeaders = (destination) => ({ * @returns */ const getBaseEndpoint = (destination) => { - const { apiServer, apiVersion } = destination.Config; + const { apiServer } = destination.Config; + let { apiVersion } = destination.Config; + apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : '1.4'; if (apiVersion === '1.4') return BASE_ENDPOINT; switch (apiServer) { @@ -191,14 +194,16 @@ const attachUserAndCompany = (message, Config) => { */ const filterCustomAttributes = (payload, type, destination) => { let ReservedAttributesList; + let { apiVersion } = destination.Config; + apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : '1.4'; if (type === 'user') { ReservedAttributesList = - destination.Config.apiVersion === '1.4' + apiVersion === '1.4' ? ReservedAttributes.oldVersionUserAttributes : ReservedAttributes.newVersionUserAttributes; } else { ReservedAttributesList = - destination.Config.apiVersion === '1.4' + apiVersion === '1.4' ? ReservedAttributes.oldVersionCompanyAttributes : ReservedAttributes.newVersionCompanyAttributes; } @@ -209,9 +214,7 @@ const filterCustomAttributes = (payload, type, destination) => { }); if (isDefinedAndNotNull(customAttributes) && Object.keys(customAttributes).length > 0) { customAttributes = - destination.Config.apiVersion === 'latest' - ? flattenJson(customAttributes, '_') - : flattenJson(customAttributes); + apiVersion === '1.4' ? flattenJson(customAttributes) : flattenJson(customAttributes, '_'); } } return Object.keys(customAttributes).length === 0 ? undefined : customAttributes; diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index f2e07ab4d6..3f08fa147c 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -211,6 +211,7 @@ describe('getBaseEndpoint utility test', () => { const destination = { Config: { apiServer: 'eu', + apiVersion: 'latest', }, }; const result = getBaseEndpoint(destination); @@ -221,6 +222,7 @@ describe('getBaseEndpoint utility test', () => { const destination = { Config: { apiServer: 'au', + apiVersion: 'latest', }, }; const result = getBaseEndpoint(destination); @@ -252,7 +254,7 @@ describe('getHeaders utility test', () => { Accept: 'application/json', 'Intercom-Version': '2.10', }; - const headers = getHeaders(destination); + const headers = getHeaders(destination, 'latest'); expect(headers).toEqual(expectedHeaders); }); }); diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 1dc89a1a61..ed78e273c6 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -3485,7 +3485,6 @@ export const data = [ }, Config: { apiKey: 'abcd=', - apiVersion: '1.4', appId: 'asdasdasd', collectContext: false, }, @@ -3632,7 +3631,6 @@ export const data = [ Config: { apiKey: 'abcd=', appId: 'asdasdasd', - apiVersion: '1.4', collectContext: false, sendAnonymousId: true, }, From e2133faa948c6b2250f579f95f62fefc254f77bd Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 25 Jan 2024 15:40:27 +0530 Subject: [PATCH 10/13] chore: change default value of apiVersion to latest --- src/cdk/v2/destinations/intercom/procWorkflow.yaml | 2 +- test/integrations/destinations/intercom/processor/data.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 10b3396759..8ef1cc9d9b 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -37,7 +37,7 @@ steps: - name: apiVersion template: | - const version = $.isDefinedAndNotNull(.destination.Config.apiVersion) ? .destination.Config.apiVersion : "1.4"; + const version = $.isDefinedAndNotNull(.destination.Config.apiVersion) ? .destination.Config.apiVersion : "latest"; version; - name: rEtlPayload diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index ed78e273c6..1dc89a1a61 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -3485,6 +3485,7 @@ export const data = [ }, Config: { apiKey: 'abcd=', + apiVersion: '1.4', appId: 'asdasdasd', collectContext: false, }, @@ -3631,6 +3632,7 @@ export const data = [ Config: { apiKey: 'abcd=', appId: 'asdasdasd', + apiVersion: '1.4', collectContext: false, sendAnonymousId: true, }, From ec6f60297e1185cb31c75eedf63ecaabb81e11c6 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Thu, 1 Feb 2024 19:17:31 +0530 Subject: [PATCH 11/13] fix: intercom router response --- .../v2/destinations/intercom/rtWorkflow.yaml | 6 +- .../destinations/intercom/network.ts | 6 +- .../destinations/intercom/processor/data.ts | 4 +- .../destinations/intercom/router/data.ts | 430 +++++++++++++++++- 4 files changed, 434 insertions(+), 12 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/rtWorkflow.yaml b/src/cdk/v2/destinations/intercom/rtWorkflow.yaml index a907403ca4..3ed1046959 100644 --- a/src/cdk/v2/destinations/intercom/rtWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/rtWorkflow.yaml @@ -1,6 +1,8 @@ bindings: - name: handleRtTfSingleEventError path: ../../../../v0/util/index + - name: isDefinedAndNotNull + path: ../../../../v0/util steps: - name: validateInput @@ -14,8 +16,8 @@ steps: - name: successfulEvents template: | - $.outputs.transform#idx.output.({ - "batchedRequest": ., + $.outputs.transform#idx{$.isDefinedAndNotNull(.output)}.({ + "batchedRequest": .output, "batched": false, "destination": ^[idx].destination, "metadata": ^[idx].metadata[], diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index 76540fd38d..74c861259f 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -165,7 +165,7 @@ const deleteNwData = [ { httpReq: { method: 'post', - url: 'https://api.intercom.io/contacts/search', + url: 'https://api.eu.intercom.io/contacts/search', data: { query: { operator: 'AND', @@ -309,7 +309,7 @@ const deleteNwData = [ { httpReq: { method: 'post', - url: 'https://api.intercom.io/companies', + url: 'https://api.eu.intercom.io/companies', data: { company_id: 'rudderlabs', name: 'RudderStack', @@ -344,7 +344,7 @@ const deleteNwData = [ { httpReq: { method: 'post', - url: 'https://api.intercom.io/companies', + url: 'https://api.eu.intercom.io/companies', data: { company_id: 'rudderlabs', name: 'RudderStack', diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 1dc89a1a61..71db9059ea 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -964,7 +964,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiVersion: 'latest', - apiServer: 'standard', + apiServer: 'eu', sendAnonymousId: false, }, }, @@ -990,7 +990,7 @@ export const data = [ FORM: {}, JSON_ARRAY: {}, }, - endpoint: 'https://api.intercom.io/contacts/70701240741e45d040/companies', + endpoint: 'https://api.eu.intercom.io/contacts/70701240741e45d040/companies', headers: { Accept: 'application/json', Authorization: 'Bearer testApiKey', diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 238dd6e808..d903076990 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -127,7 +127,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiVersion: 'latest', - apiServer: 'standard', + apiServer: 'eu', sendAnonymousId: false, }, }, @@ -170,7 +170,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiVersion: 'latest', - apiServer: 'standard', + apiServer: 'eu', sendAnonymousId: false, }, }, @@ -304,7 +304,7 @@ export const data = [ FORM: {}, JSON_ARRAY: {}, }, - endpoint: 'https://api.intercom.io/contacts/70701240741e45d040/companies', + endpoint: 'https://api.eu.intercom.io/contacts/70701240741e45d040/companies', files: {}, headers: { Authorization: 'Bearer testApiKey', @@ -320,7 +320,7 @@ export const data = [ destination: { Config: { apiKey: 'testApiKey', - apiServer: 'standard', + apiServer: 'eu', apiVersion: 'latest', sendAnonymousId: false, }, @@ -352,7 +352,7 @@ export const data = [ destination: { Config: { apiKey: 'testApiKey', - apiServer: 'standard', + apiServer: 'eu', apiVersion: 'latest', sendAnonymousId: false, }, @@ -374,4 +374,424 @@ export const data = [ }, }, }, + { + name: 'intercom', + description: 'Test 0', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + userId: 'test_user_id_1', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + metadata: { + jobId: 1, + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + sendAnonymousId: false, + updateLastRequestAt: false, + collectContext: false, + }, + }, + }, + { + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + metadata: { + jobId: 2, + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + sendAnonymousId: false, + updateLastRequestAt: false, + collectContext: false, + }, + }, + }, + { + message: { + userId: 'user@5', + groupId: 'rudderlabs', + channel: 'web', + context: { + traits: { + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + ownerId: '17', + }, + }, + traits: { + name: 'RudderStack', + size: 500, + website: 'www.rudderstack.com', + industry: 'CDP', + plan: 'enterprise', + }, + type: 'group', + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + sendAnonymousId: false, + collectContext: false, + }, + }, + metadata: { + jobId: 3, + }, + }, + ], + destType: 'intercom', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer testApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + name: 'Test Name', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + update_last_request_at: false, + user_id: 'test_user_id_1', + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + metadata: [ + { + jobId: 1, + }, + ], + batched: false, + statusCode: 200, + destination: { + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + collectContext: false, + sendAnonymousId: false, + updateLastRequestAt: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer testApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + signed_up_at: 1601493060, + name: 'Test Name', + last_seen_user_agent: 'unknown', + update_last_request_at: false, + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + metadata: [ + { + jobId: 2, + }, + ], + batched: false, + statusCode: 200, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + collectContext: false, + sendAnonymousId: false, + updateLastRequestAt: false, + }, + }, + }, + { + batched: false, + batchedRequest: [ + { + body: { + FORM: {}, + JSON: { + company_id: 'rudderlabs', + industry: 'CDP', + name: 'RudderStack', + plan: 'enterprise', + size: 500, + website: 'www.rudderstack.com', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.intercom.io/companies', + files: {}, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + 'Intercom-Version': '1.4', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + { + body: { + FORM: {}, + JSON: { + companies: [ + { + company_id: 'rudderlabs', + name: 'RudderStack', + }, + ], + email: 'test+5@rudderlabs.com', + user_id: 'user@5', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.intercom.io/users', + files: {}, + headers: { + Accept: 'application/json', + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + 'Intercom-Version': '1.4', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + ], + destination: { + Config: { + apiKey: 'testApiKey', + apiVersion: '1.4', + collectContext: false, + sendAnonymousId: false, + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + }, + metadata: [ + { + jobId: 3, + }, + ], + statusCode: 200, + }, + ], + }, + }, + }, + }, ]; From 48342104d17999381d0c3653f58f0b9c74b86515 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Fri, 2 Feb 2024 08:45:38 +0530 Subject: [PATCH 12/13] chore: code review changes --- src/cdk/v2/destinations/intercom/config.js | 8 ++++---- src/cdk/v2/destinations/intercom/utils.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/config.js b/src/cdk/v2/destinations/intercom/config.js index ceaf8e1951..518d805d41 100644 --- a/src/cdk/v2/destinations/intercom/config.js +++ b/src/cdk/v2/destinations/intercom/config.js @@ -6,7 +6,7 @@ const SEARCH_CONTACT_ENDPOINT = 'contacts/search'; const CREATE_OR_UPDATE_COMPANY_ENDPOINT = 'companies'; const ReservedAttributes = { - oldVersionUserAttributes: [ + v1UserAttributes: [ 'userId', 'email', 'phone', @@ -18,7 +18,7 @@ const ReservedAttributes = { 'lastname', 'company', ], - newVersionUserAttributes: [ + v2UserAttributes: [ 'userId', 'role', 'email', @@ -37,7 +37,7 @@ const ReservedAttributes = { 'originalTimestamp', 'unsubscribedFromEmails', ], - oldVersionCompanyAttributes: [ + v1CompanyAttributes: [ 'remoteCreatedAt', 'monthlySpend', 'industry', @@ -47,7 +47,7 @@ const ReservedAttributes = { 'name', 'userId', ], - newVersionCompanyAttributes: [ + v2CompanyAttributes: [ 'tags', 'size', 'plan', diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 8a26a1762a..310470dd85 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -199,13 +199,13 @@ const filterCustomAttributes = (payload, type, destination) => { if (type === 'user') { ReservedAttributesList = apiVersion === '1.4' - ? ReservedAttributes.oldVersionUserAttributes - : ReservedAttributes.newVersionUserAttributes; + ? ReservedAttributes.v1UserAttributes + : ReservedAttributes.v2UserAttributes; } else { ReservedAttributesList = apiVersion === '1.4' - ? ReservedAttributes.oldVersionCompanyAttributes - : ReservedAttributes.newVersionCompanyAttributes; + ? ReservedAttributes.v1CompanyAttributes + : ReservedAttributes.v2CompanyAttributes; } let customAttributes = { ...get(payload, 'custom_attributes') }; if (customAttributes) { From cccb813cb10c071776ee1b4ddea6ba20d4a0c508 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Fri, 2 Feb 2024 09:11:39 +0530 Subject: [PATCH 13/13] chore: code review changes --- .../destinations/intercom/procWorkflow.yaml | 24 +++---- src/cdk/v2/destinations/intercom/utils.js | 14 ++-- .../v2/destinations/intercom/utils.test.js | 12 ++-- .../destinations/intercom/processor/data.ts | 64 +++++++++---------- .../destinations/intercom/router/data.ts | 28 ++++---- 5 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 8ef1cc9d9b..04afba9a25 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -37,7 +37,7 @@ steps: - name: apiVersion template: | - const version = $.isDefinedAndNotNull(.destination.Config.apiVersion) ? .destination.Config.apiVersion : "latest"; + const version = $.isDefinedAndNotNull(.destination.Config.apiVersion) ? .destination.Config.apiVersion : "v2"; version; - name: rEtlPayload @@ -48,13 +48,13 @@ steps: payload; - name: searchContact - condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && $.outputs.apiVersion !== "1.4" + condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && $.outputs.apiVersion !== "v1" template: | const contactId = await $.searchContact(.message, .destination); contactId; - name: identifyTransformationForLatestVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "1.4" && !.message.context.mappedToDestination + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "v1" && !.message.context.mappedToDestination template: | const payload = .message.({ external_id: {{{{$.getGenericPaths("userIdOnly")}}}}, @@ -71,7 +71,7 @@ steps: payload; - name: identifyPayloadForLatestVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "1.4" + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion !== "v1" template: | const payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForLatestVersion; payload.name = $.getName(.message); @@ -86,7 +86,7 @@ steps: $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - name: identifyTransformationForOlderVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "1.4" && !.message.context.mappedToDestination + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "v1" && !.message.context.mappedToDestination template: | const payload = .message.({ user_id: {{{{$.getGenericPaths("userIdOnly")}}}}, @@ -99,7 +99,7 @@ steps: payload; - name: identifyPayloadForOlderVersion - condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "1.4" + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} && $.outputs.apiVersion === "v1" template: | let payload = .message.context.mappedToDestination ? $.outputs.rEtlPayload : $.outputs.identifyTransformationForOlderVersion; payload = { @@ -129,9 +129,9 @@ steps: email: {{{{$.getGenericPaths("email")}}}}, metadata: .properties }); - $.outputs.apiVersion !== "1.4" ? payload.id = .message.properties.id || .message.traits.id; - $.outputs.apiVersion !== "1.4" ? payload.created_at = $.toSeconds(timestamp); - $.outputs.apiVersion === "1.4" ? payload.created = $.toSeconds(timestamp); + $.outputs.apiVersion !== "v1" ? payload.id = .message.properties.id || .message.traits.id; + $.outputs.apiVersion !== "v1" ? payload.created_at = $.toSeconds(timestamp); + $.outputs.apiVersion === "v1" ? payload.created = $.toSeconds(timestamp); !(payload.user_id) && .destination.Config.sendAnonymousId ? payload.user_id = .message.anonymousId; payload; @@ -163,7 +163,7 @@ steps: payload; - name: groupPayloadForLatestVersion - condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion !== "1.4" + condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion !== "v1" steps: - name: validateMessageAndPreparePayload template: | @@ -192,7 +192,7 @@ steps: $.removeUndefinedAndNullValues($.context.payload); - name: groupPayloadForOlderVersion - condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion === "1.4" + condition: $.outputs.messageType === {{$.EventType.GROUP}} && $.outputs.apiVersion === "v1" template: | $.context.response = []; const response = $.defaultRequestConfig(); @@ -226,5 +226,5 @@ steps: response.endpoint = $.context.endpoint; response.method = $.context.requestMethod; response.headers = $.getHeaders(.destination, $.outputs.apiVersion); - $.outputs.apiVersion === "1.4" && $.outputs.messageType !== {{$.EventType.GROUP}} ? response.userId = .message.anonymousId; + $.outputs.apiVersion === "v1" && $.outputs.messageType !== {{$.EventType.GROUP}} ? response.userId = .message.anonymousId; response; diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 310470dd85..0f18029f19 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -39,7 +39,7 @@ const getHeaders = (destination, apiVersion) => ({ 'Content-Type': JSON_MIME_TYPE, Authorization: `Bearer ${destination.Config.apiKey}`, Accept: JSON_MIME_TYPE, - 'Intercom-Version': apiVersion === '1.4' ? '1.4' : '2.10', + 'Intercom-Version': apiVersion === 'v1' ? '1.4' : '2.10', }); /** @@ -50,9 +50,9 @@ const getHeaders = (destination, apiVersion) => ({ const getBaseEndpoint = (destination) => { const { apiServer } = destination.Config; let { apiVersion } = destination.Config; - apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : '1.4'; + apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : 'v2'; - if (apiVersion === '1.4') return BASE_ENDPOINT; + if (apiVersion === 'v1') return BASE_ENDPOINT; switch (apiServer) { case 'eu': return BASE_EU_ENDPOINT; @@ -195,15 +195,15 @@ const attachUserAndCompany = (message, Config) => { const filterCustomAttributes = (payload, type, destination) => { let ReservedAttributesList; let { apiVersion } = destination.Config; - apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : '1.4'; + apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : 'v2'; if (type === 'user') { ReservedAttributesList = - apiVersion === '1.4' + apiVersion === 'v1' ? ReservedAttributes.v1UserAttributes : ReservedAttributes.v2UserAttributes; } else { ReservedAttributesList = - apiVersion === '1.4' + apiVersion === 'v1' ? ReservedAttributes.v1CompanyAttributes : ReservedAttributes.v2CompanyAttributes; } @@ -214,7 +214,7 @@ const filterCustomAttributes = (payload, type, destination) => { }); if (isDefinedAndNotNull(customAttributes) && Object.keys(customAttributes).length > 0) { customAttributes = - apiVersion === '1.4' ? flattenJson(customAttributes) : flattenJson(customAttributes, '_'); + apiVersion === 'v1' ? flattenJson(customAttributes) : flattenJson(customAttributes, '_'); } } return Object.keys(customAttributes).length === 0 ? undefined : customAttributes; diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index 3f08fa147c..e651b4ea5d 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -211,7 +211,7 @@ describe('getBaseEndpoint utility test', () => { const destination = { Config: { apiServer: 'eu', - apiVersion: 'latest', + apiVersion: 'v2', }, }; const result = getBaseEndpoint(destination); @@ -222,7 +222,7 @@ describe('getBaseEndpoint utility test', () => { const destination = { Config: { apiServer: 'au', - apiVersion: 'latest', + apiVersion: 'v2', }, }; const result = getBaseEndpoint(destination); @@ -254,7 +254,7 @@ describe('getHeaders utility test', () => { Accept: 'application/json', 'Intercom-Version': '2.10', }; - const headers = getHeaders(destination, 'latest'); + const headers = getHeaders(destination, 'v2'); expect(headers).toEqual(expectedHeaders); }); }); @@ -311,7 +311,7 @@ describe('getName utility test', () => { describe('filterCustomAttributes utility test', () => { it('Should return an empty object when all custom attributes are reserved attributes', () => { const payload = { custom_attributes: { email: 'test@rudder.com', name: 'rudder test' } }; - const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'latest' } }); + const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'v2' } }); expect(result).toBeUndefined(); }); @@ -319,13 +319,13 @@ describe('filterCustomAttributes utility test', () => { const payload = { custom_attributes: { source: 'rudder-js-sdk', data: { nestedAttribute: 'nestedValue' } }, }; - const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'latest' } }); + const result = filterCustomAttributes(payload, 'user', { Config: { apiVersion: 'v2' } }); expect(result).toEqual({ source: 'rudder-js-sdk', data_nestedAttribute: 'nestedValue' }); }); it('Should return null when custom_attributes is null', () => { const payload = { custom_attributes: null }; - const result = filterCustomAttributes(payload, 'company', { Config: { apiVersion: 'latest' } }); + const result = filterCustomAttributes(payload, 'company', { Config: { apiVersion: 'v2' } }); expect(result).toBeUndefined(); }); }); diff --git a/test/integrations/destinations/intercom/processor/data.ts b/test/integrations/destinations/intercom/processor/data.ts index 71db9059ea..7ed9879b34 100644 --- a/test/integrations/destinations/intercom/processor/data.ts +++ b/test/integrations/destinations/intercom/processor/data.ts @@ -34,7 +34,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -107,7 +107,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -175,7 +175,7 @@ export const data = [ }, }, Config: { - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -249,7 +249,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -341,7 +341,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -437,7 +437,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -515,7 +515,7 @@ export const data = [ }, Config: { apiKey: 'invalidApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -598,7 +598,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -682,7 +682,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -787,7 +787,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -866,7 +866,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -963,7 +963,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'eu', sendAnonymousId: false, }, @@ -1047,7 +1047,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -1140,7 +1140,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'standard', sendAnonymousId: false, }, @@ -1296,7 +1296,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -1443,7 +1443,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -1579,7 +1579,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -1715,7 +1715,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -1850,7 +1850,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -1974,7 +1974,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -2132,7 +2132,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, updateLastRequestAt: false, @@ -2286,7 +2286,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -2457,7 +2457,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -2615,7 +2615,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -2745,7 +2745,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -2867,7 +2867,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, }, @@ -3003,7 +3003,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, sendAnonymousId: true, @@ -3141,7 +3141,7 @@ export const data = [ }, Config: { apiKey: 'intercomApiKey', - apiVersion: '1.4', + apiVersion: 'v1', appId: '9e9cdea1-78fa-4829-a9b2-5d7f7e96d1a0', collectContext: false, sendAnonymousId: false, @@ -3218,7 +3218,7 @@ export const data = [ Config: { apiKey: 'abcd=', appId: 'asdasdasd', - apiVersion: '1.4', + apiVersion: 'v1', collectContext: false, }, }, @@ -3384,7 +3384,7 @@ export const data = [ }, Config: { apiKey: 'abcd=', - apiVersion: '1.4', + apiVersion: 'v1', appId: 'asdasdasd', collectContext: false, }, @@ -3485,7 +3485,7 @@ export const data = [ }, Config: { apiKey: 'abcd=', - apiVersion: '1.4', + apiVersion: 'v1', appId: 'asdasdasd', collectContext: false, }, @@ -3632,7 +3632,7 @@ export const data = [ Config: { apiKey: 'abcd=', appId: 'asdasdasd', - apiVersion: '1.4', + apiVersion: 'v1', collectContext: false, sendAnonymousId: true, }, diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index d903076990..7ce3c7351a 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -38,7 +38,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, updateLastRequestAt: true, }, @@ -84,7 +84,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, updateLastRequestAt: false, }, @@ -126,7 +126,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'eu', sendAnonymousId: false, }, @@ -169,7 +169,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: 'latest', + apiVersion: 'v2', apiServer: 'eu', sendAnonymousId: false, }, @@ -225,7 +225,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, updateLastRequestAt: true, }, @@ -280,7 +280,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'standard', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, updateLastRequestAt: false, }, @@ -321,7 +321,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'eu', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, }, DestinationDefinition: { @@ -353,7 +353,7 @@ export const data = [ Config: { apiKey: 'testApiKey', apiServer: 'eu', - apiVersion: 'latest', + apiVersion: 'v2', sendAnonymousId: false, }, DestinationDefinition: { @@ -459,7 +459,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', sendAnonymousId: false, updateLastRequestAt: false, collectContext: false, @@ -539,7 +539,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', sendAnonymousId: false, updateLastRequestAt: false, collectContext: false, @@ -579,7 +579,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', sendAnonymousId: false, collectContext: false, }, @@ -642,7 +642,7 @@ export const data = [ destination: { Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', collectContext: false, sendAnonymousId: false, updateLastRequestAt: false, @@ -702,7 +702,7 @@ export const data = [ }, Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', collectContext: false, sendAnonymousId: false, updateLastRequestAt: false, @@ -772,7 +772,7 @@ export const data = [ destination: { Config: { apiKey: 'testApiKey', - apiVersion: '1.4', + apiVersion: 'v1', collectContext: false, sendAnonymousId: false, },