From 8956ba2d1c7c261b49614194f75da6fef4d0bf5d Mon Sep 17 00:00:00 2001 From: Chandra shekar Varkala Date: Tue, 25 Jul 2023 02:48:28 -0500 Subject: [PATCH 01/15] chore: apicontract test --- test/__tests__/apicontract.test.1.ts | 204 ++++++++++++++++++ test/__tests__/data/generic_router_input.json | 92 ++++++++ 2 files changed, 296 insertions(+) create mode 100644 test/__tests__/apicontract.test.1.ts create mode 100644 test/__tests__/data/generic_router_input.json diff --git a/test/__tests__/apicontract.test.1.ts b/test/__tests__/apicontract.test.1.ts new file mode 100644 index 0000000000..2fadd9aa01 --- /dev/null +++ b/test/__tests__/apicontract.test.1.ts @@ -0,0 +1,204 @@ +import fs from 'fs'; +import path from 'path'; +import request from 'supertest'; +import { createHttpTerminator } from 'http-terminator'; +import Koa from 'koa'; +import bodyParser from 'koa-bodyparser'; +import { applicationRoutes } from '../../src/routes'; + +let server: any; +const OLD_ENV = process.env; + +beforeAll(async () => { + process.env = { ...OLD_ENV }; // Make a copy + const app = new Koa(); + app.use( + bodyParser({ + jsonLimit: '200mb', + }), + ); + applicationRoutes(app); + server = app.listen(9090); +}); + +afterAll(async () => { + process.env = OLD_ENV; // Restore old environment + const httpTerminator = createHttpTerminator({ + server, + }); + await httpTerminator.terminate(); +}); + +const getDataFromPath = (pathInput) => { + const testDataFile = fs.readFileSync(path.resolve(__dirname, pathInput)); + return JSON.parse(testDataFile.toString()); +}; + +const integrations = { + ACTIVE_CAMPAIGN: 'active_campaign', + ALGOLIA: 'algolia', + CANDU: 'candu', + DELIGHTED: 'delighted', + DRIP: 'drip', + FB_CUSTOM_AUDIENCE: 'fb_custom_audience', + GA: 'ga', + GAINSIGHT: 'gainsight', + GAINSIGHT_PX: 'gainsight_px', + GOOGLESHEETS: 'googlesheets', + GOOGLE_ADWORDS_ENHANCED_CONVERSIONS: 'google_adwords_enhanced_conversions', + GOOGLE_ADWORDS_REMARKETING_LISTS: 'google_adwords_remarketing_lists', + GOOGLE_ADWORDS_OFFLINE_CONVERSIONS: 'google_adwords_offline_conversions', + HS: 'hs', + ITERABLE: 'iterable', + KLAVIYO: 'klaviyo', + KUSTOMER: 'kustomer', + MAILCHIMP: 'mailchimp', + MAILMODO: 'mailmodo', + MARKETO: 'marketo', + OMETRIA: 'ometria', + PARDOT: 'pardot', + PINTEREST_TAG: 'pinterest_tag', + PROFITWELL: 'profitwell', + SALESFORCE: 'salesforce', + SFMC: 'sfmc', + SNAPCHAT_CONVERSION: 'snapchat_conversion', + TIKTOK_ADS: 'tiktok_ads', + TRENGO: 'trengo', + YAHOO_DSP: 'yahoo_dsp', + CANNY: 'canny', + LAMBDA: 'lambda', + WOOTRIC: 'wootric', + GOOGLE_CLOUD_FUNCTION: 'google_cloud_function', + BQSTREAM: 'bqstream', + CLICKUP: 'clickup', + FRESHMARKETER: 'freshmarketer', + FRESHSALES: 'freshsales', + MONDAY: 'monday', + CUSTIFY: 'custify', + USER: 'user', + REFINER: 'refiner', + FACEBOOK_OFFLINE_CONVERSIONS: 'facebook_offline_conversions', + MAILJET: 'mailjet', + SNAPCHAT_CUSTOM_AUDIENCE: 'snapchat_custom_audience', + MARKETO_STATIC_LIST: 'marketo_static_list', + CAMPAIGN_MANAGER: 'campaign_manager', + SENDGRID: 'sendgrid', + SENDINBLUE: 'sendinblue', + ZENDESK: 'zendesk', + MP: 'mp', + TIKTOK_ADS_OFFLINE_EVENTS: 'tiktok_ads_offline_events', + CRITEO_AUDIENCE: 'criteo_audience', + CUSTOMERIO: 'customerio', + BRAZE: 'braze', + OPTIMIZELY_FULLSTACK: 'optimizely_fullstack', + TWITTER_ADS: 'twitter_ads', +}; + +const features = getDataFromPath('../../src/features.json'); +const allIntegrations: string[] = []; +Object.keys(features.routerTransform).forEach((feature) => { + allIntegrations.push(integrations[feature]); +}); + +console.log(allIntegrations); + +//Only google sheets failing. Rest all passing. +describe('Router transform tests', () => { + allIntegrations.forEach((integration) => { + const data = getDataFromPath('./data/generic_router_input.json'); + data.input.forEach((inputData) => { + test(`${integration} router transform`, async () => { + inputData.destType = integration; + + const response = await request(server) + .post('/routerTransform') + .set('Accept', 'application/json') + .send(inputData); + expect(response.status).toEqual(200); + const routerOutput = JSON.parse(response.text).output; + + const returnedJobids = {}; + routerOutput.forEach((outEvent) => { + console.log(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; + console.log(jobId); + expect(returnedJobids[jobId]).toBeUndefined(); + returnedJobids[jobId] = true; + }); + }); + + const inputJobids = {}; + inputData.input.forEach((input) => { + const jobId = input.metadata.jobId; + inputJobids[jobId] = true; + }); + + expect(returnedJobids).toEqual(inputJobids); + }); + }); + }); +}); + +describe('Batch tests', () => { + allIntegrations.forEach((integration) => { + const data = getDataFromPath('./data/generic_router_input.json'); + data.input.forEach((inputData) => { + test(`${integration} batch`, async () => { + inputData.destType = integration; + + const response = await request(server) + .post('/batch') + .set('Accept', 'application/json') + .send(inputData); + expect(response.status).toEqual(200); + const routerOutput = JSON.parse(response.text).output; + + const returnedJobids = {}; + routerOutput.forEach((outEvent) => { + console.log(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; + console.log(jobId); + expect(returnedJobids[jobId]).toBeUndefined(); + returnedJobids[jobId] = true; + }); + }); + + const inputJobids = {}; + inputData.input.forEach((input) => { + const jobId = input.metadata.jobId; + inputJobids[jobId] = true; + }); + + expect(returnedJobids).toEqual(inputJobids); + }); + }); + }); +}); diff --git a/test/__tests__/data/generic_router_input.json b/test/__tests__/data/generic_router_input.json new file mode 100644 index 0000000000..12c2b15e04 --- /dev/null +++ b/test/__tests__/data/generic_router_input.json @@ -0,0 +1,92 @@ +{ + "input": [ + { + "input": [ + { + "message": { + "channel": "web", + "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": "123456", + "integrations": { + "All": true + }, + "sentAt": "2019-10-14T09:03:22.563Z" + }, + "metadata": { + "jobId": 1 + }, + "destination": { + "Config": { + "apiKey": "abcde", + "groupTypeTrait": "email", + "groupValueTrait": "age" + } + } + }, + { + "message": { + "channel": "web", + "request_ip": "1.1.1.1", + "type": "page", + "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71", + "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", + "originalTimestamp": "2019-10-14T11:15:18.299Z", + "anonymousId": "00000000000000000000000000", + "userId": "12345", + "properties": { + "path": "/destinations/amplitude", + "referrer": "", + "search": "", + "title": "", + "url": "https://docs.rudderstack.com/destinations/amplitude", + "category": "destination", + "initial_referrer": "https://docs.rudderstack.com", + "initial_referring_domain": "docs.rudderstack.com" + }, + "integrations": { + "All": true + }, + "name": "ApplicationLoaded", + "sentAt": "2019-10-14T11:15:53.296Z" + }, + "metadata": { + "jobId": 2 + }, + "destination": { + "Config": { + "apiKey": "abcde" + } + } + } + ], + "destType": "xyz" + }, + { + "input": [ + { + "message": {}, + "metadata": { + "jobId": 1 + }, + "destination": { + "Config": {} + } + }, + { + "message": {}, + "metadata": { + "jobId": 2 + }, + "destination": { + "Config": {} + } + } + ], + "destType": "xyz" + } + ] +} From cbe88720455d3f18036f588ec8375a5ac545c885 Mon Sep 17 00:00:00 2001 From: Chandra shekar Varkala Date: Tue, 25 Jul 2023 21:13:44 -0500 Subject: [PATCH 02/15] chore: contract tests --- ...contract.test.1.ts => apicontract.test.ts} | 134 ++-- test/__tests__/data/generic_router_input.json | 727 +++++++++++++++++- 2 files changed, 784 insertions(+), 77 deletions(-) rename test/__tests__/{apicontract.test.1.ts => apicontract.test.ts} (60%) diff --git a/test/__tests__/apicontract.test.1.ts b/test/__tests__/apicontract.test.ts similarity index 60% rename from test/__tests__/apicontract.test.1.ts rename to test/__tests__/apicontract.test.ts index 2fadd9aa01..dbae07b465 100644 --- a/test/__tests__/apicontract.test.1.ts +++ b/test/__tests__/apicontract.test.ts @@ -5,6 +5,7 @@ import { createHttpTerminator } from 'http-terminator'; import Koa from 'koa'; import bodyParser from 'koa-bodyparser'; import { applicationRoutes } from '../../src/routes'; +import min from 'lodash/min'; let server: any; const OLD_ENV = process.env; @@ -95,14 +96,72 @@ const integrations = { }; const features = getDataFromPath('../../src/features.json'); -const allIntegrations: string[] = []; +let allIntegrations: string[] = []; Object.keys(features.routerTransform).forEach((feature) => { allIntegrations.push(integrations[feature]); }); console.log(allIntegrations); -//Only google sheets failing. Rest all passing. +const assertRouterOutput = (routerOutput, inputData) => { + const returnedJobids = {}; + routerOutput.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 = {}; + inputData.input.forEach((input) => { + const jobId = input.metadata.jobId; + inputJobids[jobId] = true; + }); + + expect(returnedJobids).toEqual(inputJobids); + + if (inputData.order) { + routerOutput.sort((a, b) => { + const aMin = min(a.metadata.map((meta) => meta.jobId)); + const bMin = min(b.metadata.map((meta) => meta.jobId)); + return aMin - bMin; + }); + + let userIdJobIdMap = {}; + routerOutput.forEach((outEvent) => { + 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); + } + }); + } +}; + describe('Router transform tests', () => { allIntegrations.forEach((integration) => { const data = getDataFromPath('./data/generic_router_input.json'); @@ -115,46 +174,18 @@ describe('Router transform tests', () => { .set('Accept', 'application/json') .send(inputData); expect(response.status).toEqual(200); + const routerOutput = JSON.parse(response.text).output; - const returnedJobids = {}; - routerOutput.forEach((outEvent) => { - console.log(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; - console.log(jobId); - expect(returnedJobids[jobId]).toBeUndefined(); - returnedJobids[jobId] = true; - }); - }); - - const inputJobids = {}; - inputData.input.forEach((input) => { - const jobId = input.metadata.jobId; - inputJobids[jobId] = true; - }); - - expect(returnedJobids).toEqual(inputJobids); + assertRouterOutput(routerOutput, inputData); }); }); }); }); +const batchIntegrations = ['am', 'kafka']; describe('Batch tests', () => { - allIntegrations.forEach((integration) => { + batchIntegrations.forEach((integration) => { const data = getDataFromPath('./data/generic_router_input.json'); data.input.forEach((inputData) => { test(`${integration} batch`, async () => { @@ -165,39 +196,10 @@ describe('Batch tests', () => { .set('Accept', 'application/json') .send(inputData); expect(response.status).toEqual(200); - const routerOutput = JSON.parse(response.text).output; - const returnedJobids = {}; - routerOutput.forEach((outEvent) => { - console.log(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; - console.log(jobId); - expect(returnedJobids[jobId]).toBeUndefined(); - returnedJobids[jobId] = true; - }); - }); - - const inputJobids = {}; - inputData.input.forEach((input) => { - const jobId = input.metadata.jobId; - inputJobids[jobId] = true; - }); - - expect(returnedJobids).toEqual(inputJobids); + const routerOutput = JSON.parse(response.text); + + assertRouterOutput(routerOutput, inputData); }); }); }); diff --git a/test/__tests__/data/generic_router_input.json b/test/__tests__/data/generic_router_input.json index 12c2b15e04..5f1cfcd1c0 100644 --- a/test/__tests__/data/generic_router_input.json +++ b/test/__tests__/data/generic_router_input.json @@ -6,10 +6,9 @@ "message": { "channel": "web", "type": "identify", - "messageId": "84e26acc-56a5-4835-8233-591137fca468", "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "123456", + "anonymousId": "xyz", "userId": "123456", "integrations": { "All": true @@ -30,19 +29,14 @@ { "message": { "channel": "web", - "request_ip": "1.1.1.1", "type": "page", - "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71", "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", "originalTimestamp": "2019-10-14T11:15:18.299Z", - "anonymousId": "00000000000000000000000000", + "anonymousId": "xyz", "userId": "12345", "properties": { - "path": "/destinations/amplitude", "referrer": "", - "search": "", - "title": "", - "url": "https://docs.rudderstack.com/destinations/amplitude", + "url": "https://www.rudderstack.com", "category": "destination", "initial_referrer": "https://docs.rudderstack.com", "initial_referring_domain": "docs.rudderstack.com" @@ -63,7 +57,8 @@ } } ], - "destType": "xyz" + "destType": "xyz", + "order": false }, { "input": [ @@ -86,7 +81,717 @@ } } ], - "destType": "xyz" + "destType": "xyz", + "order": false + }, + { + "input": [ + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.117Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-AS", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "locale": "es" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.885Z", + "receivedAt": "2023-07-25T18:17:52.887Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.115Z" + }, + "metadata": { + "userId": "u1", + "jobId": 3 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "j", + "sentAt": "2023-07-25T18:17:52.117Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-AS", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.885Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:52.887Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.115Z" + }, + "metadata": { + "userId": "u2", + "jobId": 4 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.137Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-WE", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "user role": "BASIC" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", + "trackingPlanVersion": 80 + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.893Z", + "receivedAt": "2023-07-25T18:17:52.895Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.135Z" + }, + "metadata": { + "userId": "u2", + "jobId": 5 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.139Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-PEC", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "locale": "es" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.900Z", + "receivedAt": "2023-07-25T18:17:52.902Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.137Z" + }, + "metadata": { + "userId": "u1", + "jobId": 6 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "j", + "sentAt": "2023-07-25T18:17:52.139Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-EW", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.900Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:52.902Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.137Z" + }, + "metadata": { + "userId": "u1", + "jobId": 7 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.143Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-TR", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "user role": "BASIC" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", + "trackingPlanVersion": 80 + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.910Z", + "receivedAt": "2023-07-25T18:17:52.911Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.142Z" + }, + "metadata": { + "userId": "u1", + "jobId": 8 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.145Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-QW", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "locale": "es" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.955Z", + "receivedAt": "2023-07-25T18:17:52.956Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.144Z" + }, + "metadata": { + "userId": "u1", + "jobId": 9 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "j", + "sentAt": "2023-07-25T18:17:52.145Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-HF", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:52.955Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:52.956Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.144Z" + }, + "metadata": { + "userId": "u2", + "jobId": 10 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "identify", + "sentAt": "2023-07-25T18:17:52.260Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-HG", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "traits": { + "locale": "es" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:53.046Z", + "receivedAt": "2023-07-25T18:17:53.048Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.258Z" + }, + "metadata": { + "userId": "u2", + "jobId": 21 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "j", + "sentAt": "2023-07-25T18:17:52.260Z", + "userId": "user1", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "es-LK", + "screen": { + "width": 1536, + "height": 864, + "density": 1.25, + "innerWidth": 1536, + "innerHeight": 739 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:53.046Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:53.048Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.258Z" + }, + "metadata": { + "userId": "u1", + "jobId": 22 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "j", + "sentAt": "2023-07-25T18:17:52.968Z", + "userId": "86217534", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "$direct", + "initial_referrer": "$direct", + "referring_domain": "", + "initial_referring_domain": "" + }, + "locale": "en-QW", + "screen": { + "width": 1440, + "height": 900, + "density": 2, + "innerWidth": 1064, + "innerHeight": 622 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:53.112Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:53.120Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:17:52.960Z" + }, + "metadata": { + "userId": "u1", + "jobId": 23 + }, + "destination": { + "Config": {} + } + }, + { + "message": { + "type": "track", + "event": "contentSubmission", + "sentAt": "2023-07-25T18:19:17.155Z", + "userId": "adg", + "channel": "web", + "context": { + "os": { + "name": "", + "version": "" + }, + "app": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1", + "namespace": "com.rudderlabs.javascript" + }, + "page": { + "url": "https://www.rudderstack.com", + "referrer": "https://www.rudderstack.com/", + "initial_referrer": "https://www.google.com/", + "referring_domain": "www.rudderstack.com", + "initial_referring_domain": "www.google.com" + }, + "locale": "en-CA", + "screen": { + "width": 1440, + "height": 900, + "density": 1, + "innerWidth": 1440, + "innerHeight": 862 + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "2.38.1" + }, + "campaign": {}, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" + }, + "rudderId": "xyz", + "timestamp": "2023-07-25T18:17:42.148Z", + "properties": { + "gtm container version": "1354" + }, + "receivedAt": "2023-07-25T18:17:53.410Z", + "anonymousId": "xyz", + "integrations": { + "All": true + }, + "originalTimestamp": "2023-07-25T18:19:05.893Z" + }, + "metadata": { + "userId": "u1", + "jobId": 24 + }, + "destination": { + "Config": {} + } + } + ], + "destType": "xyz", + "order": true } ] } From a119c4b85244f772d795882d5dc11582f6ae4b0a Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Wed, 6 Sep 2023 21:44:51 +0530 Subject: [PATCH 03/15] fix: initial commit --- src/v0/destinations/bqstream/transform.js | 72 +++++++++++-------- src/v0/destinations/bqstream/util.js | 66 ++++++++++++++++- src/v0/destinations/bqstream/util.test.js | 62 ++++++++++++++++ .../destinations/bqstream/router/data.ts | 4 ++ 4 files changed, 173 insertions(+), 31 deletions(-) create mode 100644 src/v0/destinations/bqstream/util.test.js diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index 4db1856535..d2f68aed28 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -9,6 +9,7 @@ const { } = require('../../util'); const { MAX_ROWS_PER_REQUEST, DESTINATION } = require('./config'); const { InstrumentationError } = require('../../util/errorTypes'); +const { getGroupedEvents } = require('./util'); const getInsertIdColValue = (properties, insertIdCol) => { if ( @@ -102,38 +103,49 @@ const processRouterDest = (inputs) => { if (errorRespEvents.length > 0) { return errorRespEvents; } - - const eventsChunk = []; // temporary variable to divide payload into chunks - const errorRespList = []; - - inputs.forEach((event) => { - try { - if (event.message.statusCode) { - // already transformed event - eventsChunk.push(event); - } else { - // if not transformed - let response = process(event); - response = Array.isArray(response) ? response : [response]; - response.forEach((res) => { - eventsChunk.push({ - message: res, - metadata: event.metadata, - destination: event.destination, - }); + const groupedEvents = getGroupedEvents(inputs); + // eslint-disable-next-line sonarjs/no-unused-collection + const finalResp = []; + console.log('groupedEvents', JSON.stringify(groupedEvents)); + groupedEvents.forEach((eventList) => { + if (eventList.length > 0) { + eventList.forEach((ev) => { + const eventsChunk = []; // temporary variable to divide payload into chunks + const errorRespList = []; + ev.forEach((event) => { + try { + if (event.message.statusCode) { + // already transformed event + eventsChunk.push(event); + } else { + // if not transformed + let response = process(event); + response = Array.isArray(response) ? response : [response]; + response.forEach((res) => { + eventsChunk.push({ + message: res, + metadata: event.metadata, + destination: event.destination, + }); + }); + } + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); + errorRespList.push(errRespEvent); + } }); - } - } catch (error) { - const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); - errorRespList.push(errRespEvent); + let batchedResponseList = []; + if (eventsChunk.length > 0) { + batchedResponseList = batchEvents(eventsChunk); + } + finalResp.push([...batchedResponseList, ...errorRespList]); + }); } - }); - - let batchedResponseList = []; - if (eventsChunk.length > 0) { - batchedResponseList = batchEvents(eventsChunk); - } - return [...batchedResponseList, ...errorRespList]; + + + }); + const allBatchedEvents =_.sortBy(finalResp.flat(), ['metadata.job_id']); + return allBatchedEvents; }; module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index cc3aba78b2..91eaafc833 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -1,4 +1,5 @@ /* eslint-disable no-param-reassign */ +const _ = require('lodash'); const getValue = require('get-value'); const { getDynamicErrorType, @@ -143,4 +144,67 @@ function networkHandler() { this.processAxiosResponse = processAxiosResponse; } -module.exports = { networkHandler }; +function splitArray(arr, delimiter) { + const result = []; + let subarray = []; + + for (const item of arr) { + if (item === delimiter) { + if (subarray.length > 0) { + result.push([...subarray]); + } + subarray = []; + } else { + subarray.push(item); + } + } + + if (subarray.length > 0) { + result.push([...subarray]); + } + + return result; +} + +const filterAndSplitEvents = (eachEventTypeArray) => { + const delimiter = 'track'; + let delimiterArray = []; + const resultArray = [] + for (const item of eachEventTypeArray) { + if (item.message.type === delimiter) { + delimiterArray.push(item); + } else { + if(delimiterArray.length > 0) { + resultArray.push(delimiterArray); + delimiterArray = []; + } + resultArray.push([item]); + } + } + // Push any remaining delimiterArray + if (delimiterArray.length > 0) { + resultArray.push(delimiterArray); + } + return resultArray; +}; + + +/** + * Groups and orders events based on userId and job_id. + * + * @param {Array} inputs - An array of objects representing events, where each object has a `metadata` property containing `userId` and `job_id`. + * @returns {Array} - An array of events grouped by `userId` and ordered by `job_id`. Each element in the array represents a group of events with the same `userId`. + */ +const getGroupedEvents = (inputs) => { + const typeBasedOrderedEvents = []; + const userIdEventMap = _.groupBy(inputs, 'metadata.userId'); + const eventGroupedByUserId = Object.values(userIdEventMap); + eventGroupedByUserId.forEach((eachUserJourney) => { + const eachEventTypeArray = filterAndSplitEvents(eachUserJourney); + typeBasedOrderedEvents.push(eachEventTypeArray); + }); + const flattenedArray = typeBasedOrderedEvents.flat(); + return flattenedArray; // u1 : [identify, track], u2: [identify, track] +} + +module.exports = { networkHandler, getGroupedEvents }; diff --git a/src/v0/destinations/bqstream/util.test.js b/src/v0/destinations/bqstream/util.test.js new file mode 100644 index 0000000000..c5de31609f --- /dev/null +++ b/src/v0/destinations/bqstream/util.test.js @@ -0,0 +1,62 @@ +// Generated by CodiumAI +const { getGroupedEvents } = require('./util'); +describe('getGroupedEvents', () => { + + // // Tests that the function returns an empty array when inputs is empty + it('should return an empty array when inputs is empty', () => { + const inputs = []; + const result = getGroupedEvents(inputs); + expect(result).toEqual([]); + }); + + // // Tests that the function returns an array with one element when inputs has only one event + it('should return an array with one element when inputs has only one event', () => { + const inputs = [{ metadata: { userId: '1', job_id: '123' } }]; + const result = getGroupedEvents(inputs); + expect(result).toEqual([[{ metadata: { userId: '1', job_id: '123' } }]]); + }); + + // // Tests that the function returns an array with one element when inputs has multiple events but all have the same userId + it('should return an array with one element when inputs has multiple events with the same userId', () => { + const inputs = [ + { metadata: { userId: '1', job_id: '123' } }, + { metadata: { userId: '1', job_id: '456' } }, + { metadata: { userId: '1', job_id: '789' } } + ]; + const result = getGroupedEvents(inputs); + expect(result).toEqual([[{ metadata: { userId: '1', job_id: '123' } }, { metadata: { userId: '1', job_id: '456' } }, { metadata: { userId: '1', job_id: '789' } }]]); + }); + + // Tests that the function returns an array with multiple elements when inputs has multiple events with different userIds + it('should return an array with multiple elements when inputs has multiple events with different userIds', () => { + const inputs = [ + { metadata: { userId: '1', job_id: '123' } }, + { metadata: { userId: '2', job_id: '456' } }, + { metadata: { userId: '3', job_id: '789' } } + ]; + const result = getGroupedEvents(inputs); + console.log(JSON.stringify(result)); + expect(result).toEqual([ + [{ metadata: { userId: '1', job_id: '123' } }], + [{ metadata: { userId: '2', job_id: '456' } }], + [{ metadata: { userId: '3', job_id: '789' } }] + ]); + }); + + // Tests that the function returns an array with multiple elements when inputs has multiple events with same userIds and some have the different job_id + it('should return an array with multiple elements when inputs has multiple events with same userIds and some have the different job_id', () => { + const inputs = [ + { metadata: { userId: '1', job_id: '123' } }, + { metadata: { userId: '2', job_id: '456' } }, + { metadata: { userId: '3', job_id: '789' } }, + { metadata: { userId: '1', job_id: '981' } } + ]; + const result = getGroupedEvents(inputs); + expect(result).toEqual([ + [{ metadata: { userId: '1', job_id: '123' } }, + { metadata: { userId: '1', job_id: '981' } }], + [{ metadata: { userId: '2', job_id: '456' } }], + [{ metadata: { userId: '3', job_id: '789' } }] + ]); + }); +}); diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index 0f6e663ad0..e746e0f8a4 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -73,6 +73,7 @@ export const data = [ }, metadata: { jobId: 1, + userId: 'user12345', }, destination: { Config: { @@ -153,6 +154,7 @@ export const data = [ }, metadata: { jobId: 2, + userId: 'user12345', }, destination: { Config: { @@ -203,9 +205,11 @@ export const data = [ metadata: [ { jobId: 1, + userId: 'user12345', }, { jobId: 2, + userId: 'user12345', }, ], batched: true, From 261aea2949cbe89237af2463154bcf952c323723 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Fri, 8 Sep 2023 13:22:23 +0530 Subject: [PATCH 04/15] fix: the event ordering while batching --- src/v0/destinations/bqstream/transform.js | 29 ++++++++------ src/v0/destinations/bqstream/util.js | 47 ++++++++--------------- 2 files changed, 33 insertions(+), 43 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index d2f68aed28..79826d3c09 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -106,13 +106,11 @@ const processRouterDest = (inputs) => { const groupedEvents = getGroupedEvents(inputs); // eslint-disable-next-line sonarjs/no-unused-collection const finalResp = []; - console.log('groupedEvents', JSON.stringify(groupedEvents)); groupedEvents.forEach((eventList) => { + let eventsChunk = []; // temporary variable to divide payload into chunks + let errorRespList = []; if (eventList.length > 0) { - eventList.forEach((ev) => { - const eventsChunk = []; // temporary variable to divide payload into chunks - const errorRespList = []; - ev.forEach((event) => { + eventList.forEach((event) => { try { if (event.message.statusCode) { // already transformed event @@ -131,18 +129,25 @@ const processRouterDest = (inputs) => { } } catch (error) { const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); + // divide the successful payloads till now into batches + let batchedResponseList = []; + if (eventsChunk.length > 0) { + batchedResponseList = batchEvents(eventsChunk); + } + // clear up the temporary variable + eventsChunk = []; errorRespList.push(errRespEvent); + finalResp.push([...batchedResponseList, ...errorRespList]); + // putting it back as an empty array + errorRespList = []; } - }); - let batchedResponseList = []; + }); + let batchedResponseList = []; if (eventsChunk.length > 0) { batchedResponseList = batchEvents(eventsChunk); - } - finalResp.push([...batchedResponseList, ...errorRespList]); - }); + finalResp.push([...batchedResponseList]); + } } - - }); const allBatchedEvents =_.sortBy(finalResp.flat(), ['metadata.job_id']); return allBatchedEvents; diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index 91eaafc833..724315c57e 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -144,33 +144,18 @@ function networkHandler() { this.processAxiosResponse = processAxiosResponse; } -function splitArray(arr, delimiter) { - const result = []; - let subarray = []; - - for (const item of arr) { - if (item === delimiter) { - if (subarray.length > 0) { - result.push([...subarray]); - } - subarray = []; - } else { - subarray.push(item); - } - } - - if (subarray.length > 0) { - result.push([...subarray]); - } - - return result; -} - -const filterAndSplitEvents = (eachEventTypeArray) => { +/** + * Splits an array of events into subarrays of track event lists. + * If any other event type is encountered, it is kept as a separate subarray. + * + * @param {Array} eachUserJourney - An array of events. eg. [track, track,identify,identify,track, track] + * @returns {Array} - An array of subarrays. eg [[track, track],[identify],[identify],[track, track]] + */ +const filterAndSplitEvents = (eachUserJourney) => { const delimiter = 'track'; let delimiterArray = []; const resultArray = [] - for (const item of eachEventTypeArray) { + for (const item of eachUserJourney) { if (item.message.type === delimiter) { delimiterArray.push(item); } else { @@ -185,15 +170,16 @@ const filterAndSplitEvents = (eachEventTypeArray) => { if (delimiterArray.length > 0) { resultArray.push(delimiterArray); } - return resultArray; -}; + return resultArray.flat(); +}; /** - * Groups and orders events based on userId and job_id. + * Groups the input events based on the `userId` property and filters and splits the events based on a delimiter. * - * @param {Array} inputs - An array of objects representing events, where each object has a `metadata` property containing `userId` and `job_id`. - * @returns {Array} - An array of events grouped by `userId` and ordered by `job_id`. Each element in the array represents a group of events with the same `userId`. + * @param {Array} inputs - An array of objects representing events with `metadata.userId` and `message.type` properties. + * @returns {Array} An array of arrays containing the grouped and filtered events. + * Each inner array represents a user journey and contains the filtered events. */ const getGroupedEvents = (inputs) => { const typeBasedOrderedEvents = []; @@ -203,8 +189,7 @@ const getGroupedEvents = (inputs) => { const eachEventTypeArray = filterAndSplitEvents(eachUserJourney); typeBasedOrderedEvents.push(eachEventTypeArray); }); - const flattenedArray = typeBasedOrderedEvents.flat(); - return flattenedArray; // u1 : [identify, track], u2: [identify, track] + return typeBasedOrderedEvents; } module.exports = { networkHandler, getGroupedEvents }; From 28a2933d879b1fef2720262b4cd737e40513282a Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Fri, 8 Sep 2023 14:05:55 +0530 Subject: [PATCH 05/15] fix: code clean up --- src/v0/destinations/bqstream/transform.js | 72 +- src/v0/destinations/bqstream/util.js | 49 +- src/v0/destinations/bqstream/util.test.js | 62 -- test/__tests__/apicontract.test.ts | 206 ----- test/__tests__/data/generic_router_input.json | 797 ------------------ 5 files changed, 42 insertions(+), 1144 deletions(-) delete mode 100644 src/v0/destinations/bqstream/util.test.js delete mode 100644 test/__tests__/apicontract.test.ts delete mode 100644 test/__tests__/data/generic_router_input.json diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index 79826d3c09..a3e6c252bd 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -104,53 +104,51 @@ const processRouterDest = (inputs) => { return errorRespEvents; } const groupedEvents = getGroupedEvents(inputs); - // eslint-disable-next-line sonarjs/no-unused-collection const finalResp = []; - groupedEvents.forEach((eventList) => { + groupedEvents.forEach((eventList) => { let eventsChunk = []; // temporary variable to divide payload into chunks let errorRespList = []; if (eventList.length > 0) { eventList.forEach((event) => { - try { - if (event.message.statusCode) { - // already transformed event - eventsChunk.push(event); - } else { - // if not transformed - let response = process(event); - response = Array.isArray(response) ? response : [response]; - response.forEach((res) => { - eventsChunk.push({ - message: res, - metadata: event.metadata, - destination: event.destination, - }); + try { + if (event.message.statusCode) { + // already transformed event + eventsChunk.push(event); + } else { + // if not transformed + let response = process(event); + response = Array.isArray(response) ? response : [response]; + response.forEach((res) => { + eventsChunk.push({ + message: res, + metadata: event.metadata, + destination: event.destination, }); - } - } catch (error) { - const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); - // divide the successful payloads till now into batches - let batchedResponseList = []; - if (eventsChunk.length > 0) { - batchedResponseList = batchEvents(eventsChunk); - } - // clear up the temporary variable - eventsChunk = []; - errorRespList.push(errRespEvent); - finalResp.push([...batchedResponseList, ...errorRespList]); - // putting it back as an empty array - errorRespList = []; + }); } + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); + // divide the successful payloads till now into batches + let batchedResponseList = []; + if (eventsChunk.length > 0) { + batchedResponseList = batchEvents(eventsChunk); + } + // clear up the temporary variable + eventsChunk = []; + errorRespList.push(errRespEvent); + finalResp.push([...batchedResponseList, ...errorRespList]); + // putting it back as an empty array + errorRespList = []; + } }); let batchedResponseList = []; - if (eventsChunk.length > 0) { - batchedResponseList = batchEvents(eventsChunk); - finalResp.push([...batchedResponseList]); - } + if (eventsChunk.length > 0) { + batchedResponseList = batchEvents(eventsChunk); + finalResp.push([...batchedResponseList]); + } } - }); - const allBatchedEvents =_.sortBy(finalResp.flat(), ['metadata.job_id']); - return allBatchedEvents; + }); + return finalResp.flat(); }; module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index 724315c57e..d12a874f97 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -145,51 +145,16 @@ function networkHandler() { } /** - * Splits an array of events into subarrays of track event lists. - * If any other event type is encountered, it is kept as a separate subarray. - * - * @param {Array} eachUserJourney - An array of events. eg. [track, track,identify,identify,track, track] - * @returns {Array} - An array of subarrays. eg [[track, track],[identify],[identify],[track, track]] - */ -const filterAndSplitEvents = (eachUserJourney) => { - const delimiter = 'track'; - let delimiterArray = []; - const resultArray = [] - for (const item of eachUserJourney) { - if (item.message.type === delimiter) { - delimiterArray.push(item); - } else { - if(delimiterArray.length > 0) { - resultArray.push(delimiterArray); - delimiterArray = []; - } - resultArray.push([item]); - } - } - // Push any remaining delimiterArray - if (delimiterArray.length > 0) { - resultArray.push(delimiterArray); - } - return resultArray.flat(); -}; - - -/** - * Groups the input events based on the `userId` property and filters and splits the events based on a delimiter. - * - * @param {Array} inputs - An array of objects representing events with `metadata.userId` and `message.type` properties. - * @returns {Array} An array of arrays containing the grouped and filtered events. - * Each inner array represents a user journey and contains the filtered events. + * Groups the input events based on the `userId` property + * + * @param {Array} inputs - An array of objects representing events with `metadata.userId` property. + * @returns {Array} An array of arrays containing the grouped events. + * Each inner array represents a user journey. */ const getGroupedEvents = (inputs) => { - const typeBasedOrderedEvents = []; const userIdEventMap = _.groupBy(inputs, 'metadata.userId'); const eventGroupedByUserId = Object.values(userIdEventMap); - eventGroupedByUserId.forEach((eachUserJourney) => { - const eachEventTypeArray = filterAndSplitEvents(eachUserJourney); - typeBasedOrderedEvents.push(eachEventTypeArray); - }); - return typeBasedOrderedEvents; -} + return eventGroupedByUserId; +}; module.exports = { networkHandler, getGroupedEvents }; diff --git a/src/v0/destinations/bqstream/util.test.js b/src/v0/destinations/bqstream/util.test.js deleted file mode 100644 index c5de31609f..0000000000 --- a/src/v0/destinations/bqstream/util.test.js +++ /dev/null @@ -1,62 +0,0 @@ -// Generated by CodiumAI -const { getGroupedEvents } = require('./util'); -describe('getGroupedEvents', () => { - - // // Tests that the function returns an empty array when inputs is empty - it('should return an empty array when inputs is empty', () => { - const inputs = []; - const result = getGroupedEvents(inputs); - expect(result).toEqual([]); - }); - - // // Tests that the function returns an array with one element when inputs has only one event - it('should return an array with one element when inputs has only one event', () => { - const inputs = [{ metadata: { userId: '1', job_id: '123' } }]; - const result = getGroupedEvents(inputs); - expect(result).toEqual([[{ metadata: { userId: '1', job_id: '123' } }]]); - }); - - // // Tests that the function returns an array with one element when inputs has multiple events but all have the same userId - it('should return an array with one element when inputs has multiple events with the same userId', () => { - const inputs = [ - { metadata: { userId: '1', job_id: '123' } }, - { metadata: { userId: '1', job_id: '456' } }, - { metadata: { userId: '1', job_id: '789' } } - ]; - const result = getGroupedEvents(inputs); - expect(result).toEqual([[{ metadata: { userId: '1', job_id: '123' } }, { metadata: { userId: '1', job_id: '456' } }, { metadata: { userId: '1', job_id: '789' } }]]); - }); - - // Tests that the function returns an array with multiple elements when inputs has multiple events with different userIds - it('should return an array with multiple elements when inputs has multiple events with different userIds', () => { - const inputs = [ - { metadata: { userId: '1', job_id: '123' } }, - { metadata: { userId: '2', job_id: '456' } }, - { metadata: { userId: '3', job_id: '789' } } - ]; - const result = getGroupedEvents(inputs); - console.log(JSON.stringify(result)); - expect(result).toEqual([ - [{ metadata: { userId: '1', job_id: '123' } }], - [{ metadata: { userId: '2', job_id: '456' } }], - [{ metadata: { userId: '3', job_id: '789' } }] - ]); - }); - - // Tests that the function returns an array with multiple elements when inputs has multiple events with same userIds and some have the different job_id - it('should return an array with multiple elements when inputs has multiple events with same userIds and some have the different job_id', () => { - const inputs = [ - { metadata: { userId: '1', job_id: '123' } }, - { metadata: { userId: '2', job_id: '456' } }, - { metadata: { userId: '3', job_id: '789' } }, - { metadata: { userId: '1', job_id: '981' } } - ]; - const result = getGroupedEvents(inputs); - expect(result).toEqual([ - [{ metadata: { userId: '1', job_id: '123' } }, - { metadata: { userId: '1', job_id: '981' } }], - [{ metadata: { userId: '2', job_id: '456' } }], - [{ metadata: { userId: '3', job_id: '789' } }] - ]); - }); -}); diff --git a/test/__tests__/apicontract.test.ts b/test/__tests__/apicontract.test.ts deleted file mode 100644 index dbae07b465..0000000000 --- a/test/__tests__/apicontract.test.ts +++ /dev/null @@ -1,206 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import request from 'supertest'; -import { createHttpTerminator } from 'http-terminator'; -import Koa from 'koa'; -import bodyParser from 'koa-bodyparser'; -import { applicationRoutes } from '../../src/routes'; -import min from 'lodash/min'; - -let server: any; -const OLD_ENV = process.env; - -beforeAll(async () => { - process.env = { ...OLD_ENV }; // Make a copy - const app = new Koa(); - app.use( - bodyParser({ - jsonLimit: '200mb', - }), - ); - applicationRoutes(app); - server = app.listen(9090); -}); - -afterAll(async () => { - process.env = OLD_ENV; // Restore old environment - const httpTerminator = createHttpTerminator({ - server, - }); - await httpTerminator.terminate(); -}); - -const getDataFromPath = (pathInput) => { - const testDataFile = fs.readFileSync(path.resolve(__dirname, pathInput)); - return JSON.parse(testDataFile.toString()); -}; - -const integrations = { - ACTIVE_CAMPAIGN: 'active_campaign', - ALGOLIA: 'algolia', - CANDU: 'candu', - DELIGHTED: 'delighted', - DRIP: 'drip', - FB_CUSTOM_AUDIENCE: 'fb_custom_audience', - GA: 'ga', - GAINSIGHT: 'gainsight', - GAINSIGHT_PX: 'gainsight_px', - GOOGLESHEETS: 'googlesheets', - GOOGLE_ADWORDS_ENHANCED_CONVERSIONS: 'google_adwords_enhanced_conversions', - GOOGLE_ADWORDS_REMARKETING_LISTS: 'google_adwords_remarketing_lists', - GOOGLE_ADWORDS_OFFLINE_CONVERSIONS: 'google_adwords_offline_conversions', - HS: 'hs', - ITERABLE: 'iterable', - KLAVIYO: 'klaviyo', - KUSTOMER: 'kustomer', - MAILCHIMP: 'mailchimp', - MAILMODO: 'mailmodo', - MARKETO: 'marketo', - OMETRIA: 'ometria', - PARDOT: 'pardot', - PINTEREST_TAG: 'pinterest_tag', - PROFITWELL: 'profitwell', - SALESFORCE: 'salesforce', - SFMC: 'sfmc', - SNAPCHAT_CONVERSION: 'snapchat_conversion', - TIKTOK_ADS: 'tiktok_ads', - TRENGO: 'trengo', - YAHOO_DSP: 'yahoo_dsp', - CANNY: 'canny', - LAMBDA: 'lambda', - WOOTRIC: 'wootric', - GOOGLE_CLOUD_FUNCTION: 'google_cloud_function', - BQSTREAM: 'bqstream', - CLICKUP: 'clickup', - FRESHMARKETER: 'freshmarketer', - FRESHSALES: 'freshsales', - MONDAY: 'monday', - CUSTIFY: 'custify', - USER: 'user', - REFINER: 'refiner', - FACEBOOK_OFFLINE_CONVERSIONS: 'facebook_offline_conversions', - MAILJET: 'mailjet', - SNAPCHAT_CUSTOM_AUDIENCE: 'snapchat_custom_audience', - MARKETO_STATIC_LIST: 'marketo_static_list', - CAMPAIGN_MANAGER: 'campaign_manager', - SENDGRID: 'sendgrid', - SENDINBLUE: 'sendinblue', - ZENDESK: 'zendesk', - MP: 'mp', - TIKTOK_ADS_OFFLINE_EVENTS: 'tiktok_ads_offline_events', - CRITEO_AUDIENCE: 'criteo_audience', - CUSTOMERIO: 'customerio', - BRAZE: 'braze', - OPTIMIZELY_FULLSTACK: 'optimizely_fullstack', - TWITTER_ADS: 'twitter_ads', -}; - -const features = getDataFromPath('../../src/features.json'); -let allIntegrations: string[] = []; -Object.keys(features.routerTransform).forEach((feature) => { - allIntegrations.push(integrations[feature]); -}); - -console.log(allIntegrations); - -const assertRouterOutput = (routerOutput, inputData) => { - const returnedJobids = {}; - routerOutput.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 = {}; - inputData.input.forEach((input) => { - const jobId = input.metadata.jobId; - inputJobids[jobId] = true; - }); - - expect(returnedJobids).toEqual(inputJobids); - - if (inputData.order) { - routerOutput.sort((a, b) => { - const aMin = min(a.metadata.map((meta) => meta.jobId)); - const bMin = min(b.metadata.map((meta) => meta.jobId)); - return aMin - bMin; - }); - - let userIdJobIdMap = {}; - routerOutput.forEach((outEvent) => { - 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); - } - }); - } -}; - -describe('Router transform tests', () => { - allIntegrations.forEach((integration) => { - const data = getDataFromPath('./data/generic_router_input.json'); - data.input.forEach((inputData) => { - test(`${integration} router transform`, async () => { - inputData.destType = integration; - - const response = await request(server) - .post('/routerTransform') - .set('Accept', 'application/json') - .send(inputData); - expect(response.status).toEqual(200); - - const routerOutput = JSON.parse(response.text).output; - - assertRouterOutput(routerOutput, inputData); - }); - }); - }); -}); - -const batchIntegrations = ['am', 'kafka']; -describe('Batch tests', () => { - batchIntegrations.forEach((integration) => { - const data = getDataFromPath('./data/generic_router_input.json'); - data.input.forEach((inputData) => { - test(`${integration} batch`, async () => { - inputData.destType = integration; - - const response = await request(server) - .post('/batch') - .set('Accept', 'application/json') - .send(inputData); - expect(response.status).toEqual(200); - - const routerOutput = JSON.parse(response.text); - - assertRouterOutput(routerOutput, inputData); - }); - }); - }); -}); diff --git a/test/__tests__/data/generic_router_input.json b/test/__tests__/data/generic_router_input.json deleted file mode 100644 index 5f1cfcd1c0..0000000000 --- a/test/__tests__/data/generic_router_input.json +++ /dev/null @@ -1,797 +0,0 @@ -{ - "input": [ - { - "input": [ - { - "message": { - "channel": "web", - "type": "identify", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T09:03:17.562Z", - "anonymousId": "xyz", - "userId": "123456", - "integrations": { - "All": true - }, - "sentAt": "2019-10-14T09:03:22.563Z" - }, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": { - "apiKey": "abcde", - "groupTypeTrait": "email", - "groupValueTrait": "age" - } - } - }, - { - "message": { - "channel": "web", - "type": "page", - "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22", - "originalTimestamp": "2019-10-14T11:15:18.299Z", - "anonymousId": "xyz", - "userId": "12345", - "properties": { - "referrer": "", - "url": "https://www.rudderstack.com", - "category": "destination", - "initial_referrer": "https://docs.rudderstack.com", - "initial_referring_domain": "docs.rudderstack.com" - }, - "integrations": { - "All": true - }, - "name": "ApplicationLoaded", - "sentAt": "2019-10-14T11:15:53.296Z" - }, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": { - "apiKey": "abcde" - } - } - } - ], - "destType": "xyz", - "order": false - }, - { - "input": [ - { - "message": {}, - "metadata": { - "jobId": 1 - }, - "destination": { - "Config": {} - } - }, - { - "message": {}, - "metadata": { - "jobId": 2 - }, - "destination": { - "Config": {} - } - } - ], - "destType": "xyz", - "order": false - }, - { - "input": [ - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.117Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-AS", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "locale": "es" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.885Z", - "receivedAt": "2023-07-25T18:17:52.887Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.115Z" - }, - "metadata": { - "userId": "u1", - "jobId": 3 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "j", - "sentAt": "2023-07-25T18:17:52.117Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-AS", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.885Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:52.887Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.115Z" - }, - "metadata": { - "userId": "u2", - "jobId": 4 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.137Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-WE", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "user role": "BASIC" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", - "trackingPlanVersion": 80 - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.893Z", - "receivedAt": "2023-07-25T18:17:52.895Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.135Z" - }, - "metadata": { - "userId": "u2", - "jobId": 5 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.139Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-PEC", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "locale": "es" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.900Z", - "receivedAt": "2023-07-25T18:17:52.902Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.137Z" - }, - "metadata": { - "userId": "u1", - "jobId": 6 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "j", - "sentAt": "2023-07-25T18:17:52.139Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-EW", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.900Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:52.902Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.137Z" - }, - "metadata": { - "userId": "u1", - "jobId": 7 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.143Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-TR", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "user role": "BASIC" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", - "trackingPlanVersion": 80 - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.910Z", - "receivedAt": "2023-07-25T18:17:52.911Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.142Z" - }, - "metadata": { - "userId": "u1", - "jobId": 8 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.145Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-QW", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "locale": "es" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.955Z", - "receivedAt": "2023-07-25T18:17:52.956Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.144Z" - }, - "metadata": { - "userId": "u1", - "jobId": 9 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "j", - "sentAt": "2023-07-25T18:17:52.145Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-HF", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:52.955Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:52.956Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.144Z" - }, - "metadata": { - "userId": "u2", - "jobId": 10 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "identify", - "sentAt": "2023-07-25T18:17:52.260Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-HG", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "traits": { - "locale": "es" - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:53.046Z", - "receivedAt": "2023-07-25T18:17:53.048Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.258Z" - }, - "metadata": { - "userId": "u2", - "jobId": 21 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "j", - "sentAt": "2023-07-25T18:17:52.260Z", - "userId": "user1", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "es-LK", - "screen": { - "width": 1536, - "height": 864, - "density": 1.25, - "innerWidth": 1536, - "innerHeight": 739 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:53.046Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:53.048Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.258Z" - }, - "metadata": { - "userId": "u1", - "jobId": 22 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "j", - "sentAt": "2023-07-25T18:17:52.968Z", - "userId": "86217534", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "$direct", - "initial_referrer": "$direct", - "referring_domain": "", - "initial_referring_domain": "" - }, - "locale": "en-QW", - "screen": { - "width": 1440, - "height": 900, - "density": 2, - "innerWidth": 1064, - "innerHeight": 622 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:53.112Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:53.120Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:17:52.960Z" - }, - "metadata": { - "userId": "u1", - "jobId": 23 - }, - "destination": { - "Config": {} - } - }, - { - "message": { - "type": "track", - "event": "contentSubmission", - "sentAt": "2023-07-25T18:19:17.155Z", - "userId": "adg", - "channel": "web", - "context": { - "os": { - "name": "", - "version": "" - }, - "app": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1", - "namespace": "com.rudderlabs.javascript" - }, - "page": { - "url": "https://www.rudderstack.com", - "referrer": "https://www.rudderstack.com/", - "initial_referrer": "https://www.google.com/", - "referring_domain": "www.rudderstack.com", - "initial_referring_domain": "www.google.com" - }, - "locale": "en-CA", - "screen": { - "width": 1440, - "height": 900, - "density": 1, - "innerWidth": 1440, - "innerHeight": 862 - }, - "library": { - "name": "RudderLabs JavaScript SDK", - "version": "2.38.1" - }, - "campaign": {}, - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15" - }, - "rudderId": "xyz", - "timestamp": "2023-07-25T18:17:42.148Z", - "properties": { - "gtm container version": "1354" - }, - "receivedAt": "2023-07-25T18:17:53.410Z", - "anonymousId": "xyz", - "integrations": { - "All": true - }, - "originalTimestamp": "2023-07-25T18:19:05.893Z" - }, - "metadata": { - "userId": "u1", - "jobId": 24 - }, - "destination": { - "Config": {} - } - } - ], - "destType": "xyz", - "order": true - } - ] -} From 09572e3ee3ddb25847771b47bcc3d5d25561e911 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Fri, 8 Sep 2023 16:54:38 +0530 Subject: [PATCH 06/15] fix: adding test cases --- .../destinations/bqstream/router/data.ts | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index e746e0f8a4..c551dc21f4 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -171,6 +171,168 @@ export const data = [ Name: 'bqstream test', }, }, + { + 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', + traits: { + count: 20, + productId: 20, + productName: 'Product-20', + }, + 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', + }, + metadata: { + jobId: 3, + userId: 'user12345', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, + { + message: { + type: 'track', + 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: { + count: 20, + productId: 20, + productName: 'Product-20', + }, + 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', + }, + metadata: { + jobId: 5, + userId: 'user123', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, ], destType: 'bqstream', }, @@ -229,6 +391,76 @@ export const data = [ Name: 'bqstream test', }, }, + { + batched: false, + destination: { + Config: { + datasetId: 'gc_dataset', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + insertId: 'productId', + projectId: 'gc-project-id', + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + tableId: 'gc_table', + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + error: 'Message Type not supported: identify', + metadata: [ + { + jobId: 3, + userId: 'user12345', + }, + ], + statTags: { + destType: 'BQSTREAM', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + { + batched: true, + batchedRequest: { + datasetId: 'gc_dataset', + projectId: 'gc-project-id', + properties: [ + { + count: 20, + insertId: '20', + productId: 20, + productName: 'Product-20', + }, + ], + tableId: 'gc_table', + }, + destination: { + Config: { + datasetId: 'gc_dataset', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + insertId: 'productId', + projectId: 'gc-project-id', + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + tableId: 'gc_table', + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + metadata: [ + { + jobId: 5, + userId: 'user123', + }, + ], + statusCode: 200, + }, ], }, }, From e90f54b028c1b58ff187eedc391a6c1871a54c8e Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Mon, 11 Sep 2023 15:38:37 +0530 Subject: [PATCH 07/15] fix: addressing comments --- src/v0/destinations/bqstream/transform.js | 54 +++++++------- src/v0/destinations/bqstream/util.js | 86 ++++++++++++++++++++++- 2 files changed, 109 insertions(+), 31 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index a3e6c252bd..631689cc75 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -9,7 +9,7 @@ const { } = require('../../util'); const { MAX_ROWS_PER_REQUEST, DESTINATION } = require('./config'); const { InstrumentationError } = require('../../util/errorTypes'); -const { getGroupedEvents } = require('./util'); +const { generateUserJourneys, HandleEventOrdering } = require('./util'); const getInsertIdColValue = (properties, insertIdCol) => { if ( @@ -51,7 +51,7 @@ const process = (event) => { }; }; -const batchEvents = (eventsChunk) => { +const batchEachUserSuccessEvents = (eventsChunk) => { const batchedResponseList = []; // arrayChunks = [[e1,e2, ..batchSize], [e1,e2, ..batchSize], ...] @@ -69,7 +69,7 @@ const batchEvents = (eventsChunk) => { chunk.forEach((ev) => { // Pixel code must be added above "batch": [..] batchResponseList.push(ev.message.properties); - metadata.push(ev.metadata); + metadata.push(ev.metadata[0]); }); batchEventResponse.batchedRequest = { @@ -103,23 +103,23 @@ const processRouterDest = (inputs) => { if (errorRespEvents.length > 0) { return errorRespEvents; } - const groupedEvents = getGroupedEvents(inputs); + const userJourneyArrays = generateUserJourneys(inputs); const finalResp = []; - groupedEvents.forEach((eventList) => { - let eventsChunk = []; // temporary variable to divide payload into chunks - let errorRespList = []; - if (eventList.length > 0) { - eventList.forEach((event) => { + userJourneyArrays.forEach((eachUserJourney) => { + const eachUserSuccessEventslist = []; // temporary variable to divide payload into chunks + const eachUserErrorEventsList = []; + if (eachUserJourney.length > 0) { + eachUserJourney.forEach((event) => { try { if (event.message.statusCode) { // already transformed event - eventsChunk.push(event); + eachUserSuccessEventslist.push(event); } else { // if not transformed let response = process(event); response = Array.isArray(response) ? response : [response]; response.forEach((res) => { - eventsChunk.push({ + eachUserSuccessEventslist.push({ message: res, metadata: event.metadata, destination: event.destination, @@ -127,25 +127,23 @@ const processRouterDest = (inputs) => { }); } } catch (error) { - const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION); - // divide the successful payloads till now into batches - let batchedResponseList = []; - if (eventsChunk.length > 0) { - batchedResponseList = batchEvents(eventsChunk); - } - // clear up the temporary variable - eventsChunk = []; - errorRespList.push(errRespEvent); - finalResp.push([...batchedResponseList, ...errorRespList]); - // putting it back as an empty array - errorRespList = []; + const eachUserErrorEvent = handleRtTfSingleEventError(event, error, DESTINATION); + eachUserErrorEventsList.push(eachUserErrorEvent); + } + }); + const orderedEventsList = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList) + // divide the successful payloads into batches + let eachUserBatchedResponse = []; + orderedEventsList.forEach((eventList) => { + // no error event list will have more than one items in the list + if(eventList[0].error) { + finalResp.push([...eventList]); + } else { + // batch the successful events + eachUserBatchedResponse = batchEachUserSuccessEvents(eventList); + finalResp.push([...eachUserBatchedResponse]); } }); - let batchedResponseList = []; - if (eventsChunk.length > 0) { - batchedResponseList = batchEvents(eventsChunk); - finalResp.push([...batchedResponseList]); - } } }); return finalResp.flat(); diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index d12a874f97..df00b55779 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -6,7 +6,7 @@ const { processAxiosResponse, } = require('../../../adapters/utils/networkUtils'); const { DISABLE_DEST, REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); -const { isHttpStatusSuccess } = require('../../util'); +const { isHttpStatusSuccess, isDefinedAndNotNull } = require('../../util'); const { proxyRequest } = require('../../../adapters/network'); const { UnhandledStatusCodeError, NetworkError, AbortedError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); @@ -151,10 +151,90 @@ function networkHandler() { * @returns {Array} An array of arrays containing the grouped events. * Each inner array represents a user journey. */ -const getGroupedEvents = (inputs) => { +const generateUserJourneys = (inputs) => { const userIdEventMap = _.groupBy(inputs, 'metadata.userId'); const eventGroupedByUserId = Object.values(userIdEventMap); return eventGroupedByUserId; }; -module.exports = { networkHandler, getGroupedEvents }; +/** + * Filters and splits an array of events based on whether they have an error or not. + * Returns an array of arrays, where inner arrays represent either a chunk of successful events or + * an array of single error event. It maintains the order of events strictly. + * + * @param {Array} sortedEvents - An array of events to be filtered and split. + * @returns {Array} - An array of arrays where each inner array represents a chunk of successful events followed by an error event. + */ +const filterAndSplitEvents = (sortedEvents) => { + let successfulEventsChunk = []; + const resultArray = [] + for (const item of sortedEvents) { + // if error is present, then push the previous successfulEventsChunk + // and then push the error event + if (isDefinedAndNotNull(item.error)) { + if(successfulEventsChunk.length > 0) { + resultArray.push(successfulEventsChunk); + successfulEventsChunk = []; + } + resultArray.push([item]); + } else { + // if error is not present, then push the event to successfulEventsChunk + successfulEventsChunk.push(item); + } + } + // Push the last successfulEventsChunk to resultArray + if (successfulEventsChunk.length > 0) { + resultArray.push(successfulEventsChunk); + } + return resultArray; +}; + + +const convertMetadataToArray = (eventList ) => { + const processedEvents = eventList.map((event) => ({ + ...event, + metadata: Array.isArray(event.metadata) ? event.metadata : [event.metadata], + })); + return processedEvents; +} + + /** + * Takes in two arrays, eachUserSuccessEventslist and eachUserErrorEventsList, and returns an ordered array of events. + * If there are no error events, it returns the array of transformed events. + * If there are no successful responses, it returns the error events. + * If there are both successful and erroneous events, it orders them based on the jobId property of the events' metadata array. + * considering error responses are built with @handleRtTfSingleEventError + * + * @param {Array} eachUserSuccessEventslist - An array of events representing successful responses for a user. + * @param {Array} eachUserErrorEventsList - An array of events representing error responses for a user. + * @returns {Array} - An ordered array of events. + * + * @example + * const eachUserSuccessEventslist = [{track, jobId: 1}, {track, jobId: 2}, {track, jobId: 5}]; + * const eachUserErrorEventsList = [{identify, jobId: 3}, {identify, jobId: 4}]; + * Output: [[{track, jobId: 1}, {track, jobId: 2}],[{identify, jobId: 3}],[{identify, jobId: 4}], {track, jobId: 5}]] + */ + const HandleEventOrdering = (eachUserSuccessEventslist, eachUserErrorEventsList) => { + // Convert 'metadata' to an array if it's not already + const processedSuccessfulEvents = convertMetadataToArray(eachUserSuccessEventslist); + const processedErrorEvents = convertMetadataToArray(eachUserErrorEventsList); + + // if there are no error events, then return the batched response + if (eachUserErrorEventsList.length === 0) { + return [processedSuccessfulEvents]; + } + // if there are no batched response, then return the error events + if (eachUserSuccessEventslist.length === 0) { + return [processedErrorEvents]; + } + + // if there are both batched response and error events, then order them + const combinedTransformedEventList = [...processedSuccessfulEvents, ...processedErrorEvents].flat(); + + const sortedEvents = _.sortBy(combinedTransformedEventList, (event) => event.metadata[0].jobId); + const finalResp = filterAndSplitEvents(sortedEvents); + + return finalResp; + } + +module.exports = { networkHandler, generateUserJourneys, HandleEventOrdering }; From 9b6138bf0902ac73d7a9882131e2710f8982705c Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Mon, 11 Sep 2023 16:39:03 +0530 Subject: [PATCH 08/15] fix: adding util function test cases --- src/v0/destinations/bqstream/utils.test.js | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/v0/destinations/bqstream/utils.test.js diff --git a/src/v0/destinations/bqstream/utils.test.js b/src/v0/destinations/bqstream/utils.test.js new file mode 100644 index 0000000000..8a8273cdea --- /dev/null +++ b/src/v0/destinations/bqstream/utils.test.js @@ -0,0 +1,42 @@ +const {HandleEventOrdering} = require('./util') + +describe('HandleEventOrdering', () => { + + // Tests that the function returns an array of transformed events when there are no error events + it('should return an array of transformed events when there are no error events', () => { + const eachUserSuccessEventslist = [{message: { type: "track"}, metadata: {jobId: 1}}, {message: { type: "track"}, metadata: {jobId: 3}}, {message: { type: "track"}, metadata: {jobId: 5}}]; + const eachUserErrorEventsList = []; + const expected = [[{"message":{"type":"track"},"metadata":[{"jobId":1}]},{"message":{"type":"track"},"metadata":[{"jobId":3}]},{"message":{"type":"track"},"metadata":[{"jobId":5}]}]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + console.log(JSON.stringify(result)) + expect(result).toEqual(expected); + }); + + // Tests that the function returns an empty array when both input arrays are empty + it('should return an empty array when both input arrays are empty', () => { + const eachUserSuccessEventslist = []; + const eachUserErrorEventsList = []; + const expected = [[]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); + + // Tests that the function returns an array with only error events when all events are erroneous + it('should return an array with only error events when all events are erroneous', () => { + const eachUserSuccessEventslist = []; + const eachUserErrorEventsList = [{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]; + const expected = [[{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); + + // Tests that the function returns an ordered array of events with both successful and erroneous events, ordered based on the jobId property of the events' metadata array + it('should return an ordered array of events with both successful and erroneous events', () => { + const eachUserSuccessEventslist = [{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]; + const eachUserErrorEventsList = [{message: { type: "track"}, metadata: {jobId: 1}}, {message: { type: "track"}, metadata: {jobId: 2}}, {message: { type: "track"}, metadata: {jobId: 5}}]; + const expected = [[{"message":{"type":"track"},"metadata":[{"jobId":1}]},{"message":{"type":"track"},"metadata":[{"jobId":2}]}],[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":3,"userId":"user12345"}]}],[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":4,"userId":"user12345"}]}],[{"message":{"type":"track"},"metadata":[{"jobId":5}]}]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + console.log(JSON.stringify(result)) + expect(result).toEqual(expected); + }); +}); From ba8ebb45396b7c4234fae493b56d7981110b0856 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Tue, 12 Sep 2023 20:00:21 +0530 Subject: [PATCH 09/15] fix: format change --- src/v0/destinations/bqstream/transform.js | 2 +- src/v0/destinations/bqstream/util.js | 82 +++++++++++----------- src/v0/destinations/bqstream/utils.test.js | 68 +++++++++--------- 3 files changed, 75 insertions(+), 77 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index 631689cc75..fd8d0adfd5 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -136,7 +136,7 @@ const processRouterDest = (inputs) => { let eachUserBatchedResponse = []; orderedEventsList.forEach((eventList) => { // no error event list will have more than one items in the list - if(eventList[0].error) { + if (eventList[0].error) { finalResp.push([...eventList]); } else { // batch the successful events diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index df00b55779..f5e97c9209 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -172,7 +172,7 @@ const filterAndSplitEvents = (sortedEvents) => { // if error is present, then push the previous successfulEventsChunk // and then push the error event if (isDefinedAndNotNull(item.error)) { - if(successfulEventsChunk.length > 0) { + if (successfulEventsChunk.length > 0) { resultArray.push(successfulEventsChunk); successfulEventsChunk = []; } @@ -180,9 +180,9 @@ const filterAndSplitEvents = (sortedEvents) => { } else { // if error is not present, then push the event to successfulEventsChunk successfulEventsChunk.push(item); - } + } } - // Push the last successfulEventsChunk to resultArray + // Push the last successfulEventsChunk to resultArray if (successfulEventsChunk.length > 0) { resultArray.push(successfulEventsChunk); } @@ -190,7 +190,7 @@ const filterAndSplitEvents = (sortedEvents) => { }; -const convertMetadataToArray = (eventList ) => { +const convertMetadataToArray = (eventList) => { const processedEvents = eventList.map((event) => ({ ...event, metadata: Array.isArray(event.metadata) ? event.metadata : [event.metadata], @@ -198,43 +198,43 @@ const convertMetadataToArray = (eventList ) => { return processedEvents; } - /** - * Takes in two arrays, eachUserSuccessEventslist and eachUserErrorEventsList, and returns an ordered array of events. - * If there are no error events, it returns the array of transformed events. - * If there are no successful responses, it returns the error events. - * If there are both successful and erroneous events, it orders them based on the jobId property of the events' metadata array. - * considering error responses are built with @handleRtTfSingleEventError - * - * @param {Array} eachUserSuccessEventslist - An array of events representing successful responses for a user. - * @param {Array} eachUserErrorEventsList - An array of events representing error responses for a user. - * @returns {Array} - An ordered array of events. - * - * @example - * const eachUserSuccessEventslist = [{track, jobId: 1}, {track, jobId: 2}, {track, jobId: 5}]; - * const eachUserErrorEventsList = [{identify, jobId: 3}, {identify, jobId: 4}]; - * Output: [[{track, jobId: 1}, {track, jobId: 2}],[{identify, jobId: 3}],[{identify, jobId: 4}], {track, jobId: 5}]] - */ - const HandleEventOrdering = (eachUserSuccessEventslist, eachUserErrorEventsList) => { - // Convert 'metadata' to an array if it's not already - const processedSuccessfulEvents = convertMetadataToArray(eachUserSuccessEventslist); - const processedErrorEvents = convertMetadataToArray(eachUserErrorEventsList); - - // if there are no error events, then return the batched response - if (eachUserErrorEventsList.length === 0) { - return [processedSuccessfulEvents]; - } - // if there are no batched response, then return the error events - if (eachUserSuccessEventslist.length === 0) { - return [processedErrorEvents]; - } +/** + * Takes in two arrays, eachUserSuccessEventslist and eachUserErrorEventsList, and returns an ordered array of events. + * If there are no error events, it returns the array of transformed events. + * If there are no successful responses, it returns the error events. + * If there are both successful and erroneous events, it orders them based on the jobId property of the events' metadata array. + * considering error responses are built with @handleRtTfSingleEventError + * + * @param {Array} eachUserSuccessEventslist - An array of events representing successful responses for a user. + * @param {Array} eachUserErrorEventsList - An array of events representing error responses for a user. + * @returns {Array} - An ordered array of events. + * + * @example + * const eachUserSuccessEventslist = [{track, jobId: 1}, {track, jobId: 2}, {track, jobId: 5}]; + * const eachUserErrorEventsList = [{identify, jobId: 3}, {identify, jobId: 4}]; + * Output: [[{track, jobId: 1}, {track, jobId: 2}],[{identify, jobId: 3}],[{identify, jobId: 4}], {track, jobId: 5}]] + */ +const HandleEventOrdering = (eachUserSuccessEventslist, eachUserErrorEventsList) => { + // Convert 'metadata' to an array if it's not already + const processedSuccessfulEvents = convertMetadataToArray(eachUserSuccessEventslist); + const processedErrorEvents = convertMetadataToArray(eachUserErrorEventsList); + + // if there are no error events, then return the batched response + if (eachUserErrorEventsList.length === 0) { + return [processedSuccessfulEvents]; + } + // if there are no batched response, then return the error events + if (eachUserSuccessEventslist.length === 0) { + return [processedErrorEvents]; + } - // if there are both batched response and error events, then order them - const combinedTransformedEventList = [...processedSuccessfulEvents, ...processedErrorEvents].flat(); - - const sortedEvents = _.sortBy(combinedTransformedEventList, (event) => event.metadata[0].jobId); - const finalResp = filterAndSplitEvents(sortedEvents); + // if there are both batched response and error events, then order them + const combinedTransformedEventList = [...processedSuccessfulEvents, ...processedErrorEvents].flat(); - return finalResp; - } + const sortedEvents = _.sortBy(combinedTransformedEventList, (event) => event.metadata[0].jobId); + const finalResp = filterAndSplitEvents(sortedEvents); + + return finalResp; +} -module.exports = { networkHandler, generateUserJourneys, HandleEventOrdering }; +module.exports = { networkHandler, generateUserJourneys, HandleEventOrdering }; diff --git a/src/v0/destinations/bqstream/utils.test.js b/src/v0/destinations/bqstream/utils.test.js index 8a8273cdea..707e547cd5 100644 --- a/src/v0/destinations/bqstream/utils.test.js +++ b/src/v0/destinations/bqstream/utils.test.js @@ -1,42 +1,40 @@ -const {HandleEventOrdering} = require('./util') +const { HandleEventOrdering } = require('./util') describe('HandleEventOrdering', () => { - // Tests that the function returns an array of transformed events when there are no error events - it('should return an array of transformed events when there are no error events', () => { - const eachUserSuccessEventslist = [{message: { type: "track"}, metadata: {jobId: 1}}, {message: { type: "track"}, metadata: {jobId: 3}}, {message: { type: "track"}, metadata: {jobId: 5}}]; - const eachUserErrorEventsList = []; - const expected = [[{"message":{"type":"track"},"metadata":[{"jobId":1}]},{"message":{"type":"track"},"metadata":[{"jobId":3}]},{"message":{"type":"track"},"metadata":[{"jobId":5}]}]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); - console.log(JSON.stringify(result)) - expect(result).toEqual(expected); - }); + // Tests that the function returns an array of transformed events when there are no error events + it('should return an array of transformed events when there are no error events', () => { + const eachUserSuccessEventslist = [{ message: { type: "track" }, metadata: { jobId: 1 } }, { message: { type: "track" }, metadata: { jobId: 3 } }, { message: { type: "track" }, metadata: { jobId: 5 } }]; + const eachUserErrorEventsList = []; + const expected = [[{ "message": { "type": "track" }, "metadata": [{ "jobId": 1 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 3 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 5 }] }]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); - // Tests that the function returns an empty array when both input arrays are empty - it('should return an empty array when both input arrays are empty', () => { - const eachUserSuccessEventslist = []; - const eachUserErrorEventsList = []; - const expected = [[]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); - expect(result).toEqual(expected); - }); + // Tests that the function returns an empty array when both input arrays are empty + it('should return an empty array when both input arrays are empty', () => { + const eachUserSuccessEventslist = []; + const eachUserErrorEventsList = []; + const expected = [[]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); - // Tests that the function returns an array with only error events when all events are erroneous - it('should return an array with only error events when all events are erroneous', () => { - const eachUserSuccessEventslist = []; - const eachUserErrorEventsList = [{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]; - const expected = [[{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); - expect(result).toEqual(expected); - }); + // Tests that the function returns an array with only error events when all events are erroneous + it('should return an array with only error events when all events are erroneous', () => { + const eachUserSuccessEventslist = []; + const eachUserErrorEventsList = [{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]; + const expected = [[{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); - // Tests that the function returns an ordered array of events with both successful and erroneous events, ordered based on the jobId property of the events' metadata array - it('should return an ordered array of events with both successful and erroneous events', () => { - const eachUserSuccessEventslist = [{batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 3,userId: 'user12345'}]}, {batched: false,destination: {},error: 'Message Type not supported: identify',metadata: [{jobId: 4,userId: 'user12345'}]}]; - const eachUserErrorEventsList = [{message: { type: "track"}, metadata: {jobId: 1}}, {message: { type: "track"}, metadata: {jobId: 2}}, {message: { type: "track"}, metadata: {jobId: 5}}]; - const expected = [[{"message":{"type":"track"},"metadata":[{"jobId":1}]},{"message":{"type":"track"},"metadata":[{"jobId":2}]}],[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":3,"userId":"user12345"}]}],[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":4,"userId":"user12345"}]}],[{"message":{"type":"track"},"metadata":[{"jobId":5}]}]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); - console.log(JSON.stringify(result)) - expect(result).toEqual(expected); - }); + // Tests that the function returns an ordered array of events with both successful and erroneous events, ordered based on the jobId property of the events' metadata array + it('should return an ordered array of events with both successful and erroneous events', () => { + const eachUserSuccessEventslist = [{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]; + const eachUserErrorEventsList = [{ message: { type: "track" }, metadata: { jobId: 1 } }, { message: { type: "track" }, metadata: { jobId: 2 } }, { message: { type: "track" }, metadata: { jobId: 5 } }]; + const expected = [[{ "message": { "type": "track" }, "metadata": [{ "jobId": 1 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 2 }] }], [{ "batched": false, "destination": {}, "error": "Message Type not supported: identify", "metadata": [{ "jobId": 3, "userId": "user12345" }] }], [{ "batched": false, "destination": {}, "error": "Message Type not supported: identify", "metadata": [{ "jobId": 4, "userId": "user12345" }] }], [{ "message": { "type": "track" }, "metadata": [{ "jobId": 5 }] }]]; + const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + expect(result).toEqual(expected); + }); }); From 7fe9071f24f0572f5b745dd6548788802c37f539 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Tue, 12 Sep 2023 21:10:29 +0530 Subject: [PATCH 10/15] fix: removing userjourney clause as suggested --- src/v0/destinations/bqstream/transform.js | 34 ++++--- .../destinations/bqstream/router/data.ts | 92 +++++++++++++++++++ 2 files changed, 108 insertions(+), 18 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index fd8d0adfd5..5601d6c208 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -103,13 +103,11 @@ const processRouterDest = (inputs) => { if (errorRespEvents.length > 0) { return errorRespEvents; } - const userJourneyArrays = generateUserJourneys(inputs); + // const userJourneyArrays = generateUserJourneys(inputs); const finalResp = []; - userJourneyArrays.forEach((eachUserJourney) => { const eachUserSuccessEventslist = []; // temporary variable to divide payload into chunks const eachUserErrorEventsList = []; - if (eachUserJourney.length > 0) { - eachUserJourney.forEach((event) => { + inputs.forEach((event) => { try { if (event.message.statusCode) { // already transformed event @@ -131,21 +129,21 @@ const processRouterDest = (inputs) => { eachUserErrorEventsList.push(eachUserErrorEvent); } }); + const orderedEventsList = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList) - // divide the successful payloads into batches - let eachUserBatchedResponse = []; - orderedEventsList.forEach((eventList) => { - // no error event list will have more than one items in the list - if (eventList[0].error) { - finalResp.push([...eventList]); - } else { - // batch the successful events - eachUserBatchedResponse = batchEachUserSuccessEvents(eventList); - finalResp.push([...eachUserBatchedResponse]); - } - }); - } - }); + // divide the successful payloads into batches + let eachUserBatchedResponse = []; + orderedEventsList.forEach((eventList) => { + // no error event list will have more than one items in the list + if (eventList[0].error) { + finalResp.push([...eventList]); + } else { + // batch the successful events + eachUserBatchedResponse = batchEachUserSuccessEvents(eventList); + finalResp.push([...eachUserBatchedResponse]); + } + }); + return finalResp.flat(); }; diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index c551dc21f4..2fe29dfec0 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -333,6 +333,87 @@ export const data = [ Name: 'bqstream test', }, }, + { + message: { + type: 'track', + 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: { + count: 20, + productId: 20, + productName: 'Product-20', + }, + 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', + }, + metadata: { + jobId: 6, + userId: 'user124', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, ], destType: 'bqstream', }, @@ -436,6 +517,13 @@ export const data = [ productId: 20, productName: 'Product-20', }, + { + count: 20, + insertId: '20', + productId: 20, + productName: 'Product-20', + }, + ], tableId: 'gc_table', }, @@ -458,6 +546,10 @@ export const data = [ jobId: 5, userId: 'user123', }, + { + jobId: 6, + userId: 'user124', + }, ], statusCode: 200, }, From 0a27b55f5f1618e331b9e747a80d14c5e56923cb Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Tue, 12 Sep 2023 21:16:16 +0530 Subject: [PATCH 11/15] fix: formatting change --- src/v0/destinations/bqstream/transform.js | 75 +++++++++---------- .../destinations/bqstream/router/data.ts | 2 +- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index 5601d6c208..b1ee7c2782 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -103,46 +103,45 @@ const processRouterDest = (inputs) => { if (errorRespEvents.length > 0) { return errorRespEvents; } - // const userJourneyArrays = generateUserJourneys(inputs); const finalResp = []; - const eachUserSuccessEventslist = []; // temporary variable to divide payload into chunks - const eachUserErrorEventsList = []; - inputs.forEach((event) => { - try { - if (event.message.statusCode) { - // already transformed event - eachUserSuccessEventslist.push(event); - } else { - // if not transformed - let response = process(event); - response = Array.isArray(response) ? response : [response]; - response.forEach((res) => { - eachUserSuccessEventslist.push({ - message: res, - metadata: event.metadata, - destination: event.destination, - }); - }); - } - } catch (error) { - const eachUserErrorEvent = handleRtTfSingleEventError(event, error, DESTINATION); - eachUserErrorEventsList.push(eachUserErrorEvent); - } - }); - - const orderedEventsList = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList) - // divide the successful payloads into batches - let eachUserBatchedResponse = []; - orderedEventsList.forEach((eventList) => { - // no error event list will have more than one items in the list - if (eventList[0].error) { - finalResp.push([...eventList]); - } else { - // batch the successful events - eachUserBatchedResponse = batchEachUserSuccessEvents(eventList); - finalResp.push([...eachUserBatchedResponse]); - } + const eachUserSuccessEventslist = []; // temporary variable to divide payload into chunks + const eachUserErrorEventsList = []; + inputs.forEach((event) => { + try { + if (event.message.statusCode) { + // already transformed event + eachUserSuccessEventslist.push(event); + } else { + // if not transformed + let response = process(event); + response = Array.isArray(response) ? response : [response]; + response.forEach((res) => { + eachUserSuccessEventslist.push({ + message: res, + metadata: event.metadata, + destination: event.destination, + }); }); + } + } catch (error) { + const eachUserErrorEvent = handleRtTfSingleEventError(event, error, DESTINATION); + eachUserErrorEventsList.push(eachUserErrorEvent); + } + }); + + const orderedEventsList = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList) + // divide the successful payloads into batches + let eachUserBatchedResponse = []; + orderedEventsList.forEach((eventList) => { + // no error event list will have more than one items in the list + if (eventList[0].error) { + finalResp.push([...eventList]); + } else { + // batch the successful events + eachUserBatchedResponse = batchEachUserSuccessEvents(eventList); + finalResp.push([...eachUserBatchedResponse]); + } + }); return finalResp.flat(); }; diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index 2fe29dfec0..9c7f6106c5 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -523,7 +523,7 @@ export const data = [ productId: 20, productName: 'Product-20', }, - + ], tableId: 'gc_table', }, From 0c9c8026183e88791489d6df0db267f68d37a2df Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Wed, 13 Sep 2023 21:51:04 +0530 Subject: [PATCH 12/15] fix: grouping similar error responses to a single response --- src/v0/destinations/bqstream/transform.js | 4 +- src/v0/destinations/bqstream/util.js | 48 ++- src/v0/destinations/bqstream/utils.test.js | 19 +- .../destinations/bqstream/router/data.ts | 345 ++++++++++++++++-- 4 files changed, 368 insertions(+), 48 deletions(-) diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js index b1ee7c2782..49fd35503f 100644 --- a/src/v0/destinations/bqstream/transform.js +++ b/src/v0/destinations/bqstream/transform.js @@ -9,7 +9,7 @@ const { } = require('../../util'); const { MAX_ROWS_PER_REQUEST, DESTINATION } = require('./config'); const { InstrumentationError } = require('../../util/errorTypes'); -const { generateUserJourneys, HandleEventOrdering } = require('./util'); +const { getRearrangedEvents } = require('./util'); const getInsertIdColValue = (properties, insertIdCol) => { if ( @@ -129,7 +129,7 @@ const processRouterDest = (inputs) => { } }); - const orderedEventsList = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList) + const orderedEventsList = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); // divide the successful payloads into batches let eachUserBatchedResponse = []; orderedEventsList.forEach((eventList) => { diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index f5e97c9209..aefdcc5d7c 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -145,17 +145,25 @@ function networkHandler() { } /** - * Groups the input events based on the `userId` property - * - * @param {Array} inputs - An array of objects representing events with `metadata.userId` property. - * @returns {Array} An array of arrays containing the grouped events. - * Each inner array represents a user journey. + * Optimizes the error response by merging the metadata of the same error type and adding it to the result array. + * + * @param {Object} item - An object representing an error event with properties like `error`, `jobId`, and `metadata`. + * @param {Map} errorMap - A Map object to store the error events and their metadata. + * @param {Array} resultArray - An array to store the optimized error response. + * @returns {void} */ -const generateUserJourneys = (inputs) => { - const userIdEventMap = _.groupBy(inputs, 'metadata.userId'); - const eventGroupedByUserId = Object.values(userIdEventMap); - return eventGroupedByUserId; -}; +const optimizeErrorResponse = (item, errorMap, resultArray) => { + const currentError = item.error; + if (errorMap.has(currentError)) { + // If the error already exists in the map, merge the metadata + const existingErrDetails = errorMap.get(currentError); + existingErrDetails.metadata.push(...item.metadata); + } else { + // Otherwise, add it to the map + errorMap.set(currentError, { ...item }); + resultArray.push([errorMap.get(currentError)]); + } +} /** * Filters and splits an array of events based on whether they have an error or not. @@ -165,9 +173,10 @@ const generateUserJourneys = (inputs) => { * @param {Array} sortedEvents - An array of events to be filtered and split. * @returns {Array} - An array of arrays where each inner array represents a chunk of successful events followed by an error event. */ -const filterAndSplitEvents = (sortedEvents) => { +const restoreEventOrder = (sortedEvents) => { let successfulEventsChunk = []; const resultArray = [] + const errorMap = new Map(); for (const item of sortedEvents) { // if error is present, then push the previous successfulEventsChunk // and then push the error event @@ -176,10 +185,12 @@ const filterAndSplitEvents = (sortedEvents) => { resultArray.push(successfulEventsChunk); successfulEventsChunk = []; } - resultArray.push([item]); + optimizeErrorResponse(item, errorMap, resultArray); } else { // if error is not present, then push the event to successfulEventsChunk successfulEventsChunk.push(item); + errorMap.clear(); + } } // Push the last successfulEventsChunk to resultArray @@ -214,7 +225,7 @@ const convertMetadataToArray = (eventList) => { * const eachUserErrorEventsList = [{identify, jobId: 3}, {identify, jobId: 4}]; * Output: [[{track, jobId: 1}, {track, jobId: 2}],[{identify, jobId: 3}],[{identify, jobId: 4}], {track, jobId: 5}]] */ -const HandleEventOrdering = (eachUserSuccessEventslist, eachUserErrorEventsList) => { +const getRearrangedEvents = (eachUserSuccessEventslist, eachUserErrorEventsList) => { // Convert 'metadata' to an array if it's not already const processedSuccessfulEvents = convertMetadataToArray(eachUserSuccessEventslist); const processedErrorEvents = convertMetadataToArray(eachUserErrorEventsList); @@ -225,16 +236,21 @@ const HandleEventOrdering = (eachUserSuccessEventslist, eachUserErrorEventsList) } // if there are no batched response, then return the error events if (eachUserSuccessEventslist.length === 0) { - return [processedErrorEvents]; + const resultArray = [] + const errorMap = new Map(); + processedErrorEvents.forEach((item) => { + optimizeErrorResponse(item, errorMap, resultArray); + }); + return resultArray; } // if there are both batched response and error events, then order them const combinedTransformedEventList = [...processedSuccessfulEvents, ...processedErrorEvents].flat(); const sortedEvents = _.sortBy(combinedTransformedEventList, (event) => event.metadata[0].jobId); - const finalResp = filterAndSplitEvents(sortedEvents); + const finalResp = restoreEventOrder(sortedEvents); return finalResp; } -module.exports = { networkHandler, generateUserJourneys, HandleEventOrdering }; +module.exports = { networkHandler, getRearrangedEvents }; diff --git a/src/v0/destinations/bqstream/utils.test.js b/src/v0/destinations/bqstream/utils.test.js index 707e547cd5..a05059ca87 100644 --- a/src/v0/destinations/bqstream/utils.test.js +++ b/src/v0/destinations/bqstream/utils.test.js @@ -1,13 +1,13 @@ -const { HandleEventOrdering } = require('./util') +const { getRearrangedEvents } = require('./util') -describe('HandleEventOrdering', () => { +describe('getRearrangedEvents', () => { // Tests that the function returns an array of transformed events when there are no error events it('should return an array of transformed events when there are no error events', () => { const eachUserSuccessEventslist = [{ message: { type: "track" }, metadata: { jobId: 1 } }, { message: { type: "track" }, metadata: { jobId: 3 } }, { message: { type: "track" }, metadata: { jobId: 5 } }]; const eachUserErrorEventsList = []; const expected = [[{ "message": { "type": "track" }, "metadata": [{ "jobId": 1 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 3 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 5 }] }]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); expect(result).toEqual(expected); }); @@ -16,7 +16,7 @@ describe('HandleEventOrdering', () => { const eachUserSuccessEventslist = []; const eachUserErrorEventsList = []; const expected = [[]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); expect(result).toEqual(expected); }); @@ -24,8 +24,9 @@ describe('HandleEventOrdering', () => { it('should return an array with only error events when all events are erroneous', () => { const eachUserSuccessEventslist = []; const eachUserErrorEventsList = [{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]; - const expected = [[{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + const expected = [[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":3,"userId":"user12345"},{"jobId":4,"userId":"user12345"}]}]]; + const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); + console.log(JSON.stringify(result)) expect(result).toEqual(expected); }); @@ -33,8 +34,8 @@ describe('HandleEventOrdering', () => { it('should return an ordered array of events with both successful and erroneous events', () => { const eachUserSuccessEventslist = [{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]; const eachUserErrorEventsList = [{ message: { type: "track" }, metadata: { jobId: 1 } }, { message: { type: "track" }, metadata: { jobId: 2 } }, { message: { type: "track" }, metadata: { jobId: 5 } }]; - const expected = [[{ "message": { "type": "track" }, "metadata": [{ "jobId": 1 }] }, { "message": { "type": "track" }, "metadata": [{ "jobId": 2 }] }], [{ "batched": false, "destination": {}, "error": "Message Type not supported: identify", "metadata": [{ "jobId": 3, "userId": "user12345" }] }], [{ "batched": false, "destination": {}, "error": "Message Type not supported: identify", "metadata": [{ "jobId": 4, "userId": "user12345" }] }], [{ "message": { "type": "track" }, "metadata": [{ "jobId": 5 }] }]]; - const result = HandleEventOrdering(eachUserSuccessEventslist, eachUserErrorEventsList); + const expected = [[{"message":{"type":"track"},"metadata":[{"jobId":1}]},{"message":{"type":"track"},"metadata":[{"jobId":2}]}],[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":3,"userId":"user12345"},{"jobId":4,"userId":"user12345"}]}],[{"message":{"type":"track"},"metadata":[{"jobId":5}]}]]; + const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); expect(result).toEqual(expected); - }); + }); }); diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index 9c7f6106c5..0886b868b1 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -1,6 +1,6 @@ export const data = [ { - name: 'dicord', + Name: 'dicord', description: 'Discord batch events', feature: 'router', module: 'destination', @@ -18,14 +18,14 @@ export const data = [ channel: 'web', context: { os: { - name: '', + Name: '', version: '', }, app: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.18', - namespace: 'com.rudderlabs.javascript', + Namespace: 'com.rudderlabs.javascript', }, page: { url: 'http://127.0.0.1:5500/index.html', @@ -48,7 +48,7 @@ export const data = [ }, traits: {}, library: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', version: '1.1.18', }, campaign: {}, @@ -99,14 +99,14 @@ export const data = [ channel: 'web', context: { os: { - name: '', + Name: '', version: '', }, app: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.18', - namespace: 'com.rudderlabs.javascript', + Namespace: 'com.rudderlabs.javascript', }, page: { url: 'http://127.0.0.1:5500/index.html', @@ -129,7 +129,7 @@ export const data = [ }, traits: {}, library: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', version: '1.1.18', }, campaign: {}, @@ -180,14 +180,14 @@ export const data = [ channel: 'web', context: { os: { - name: '', + Name: '', version: '', }, app: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.18', - namespace: 'com.rudderlabs.javascript', + Namespace: 'com.rudderlabs.javascript', }, page: { url: 'http://127.0.0.1:5500/index.html', @@ -210,7 +210,7 @@ export const data = [ }, traits: {}, library: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', version: '1.1.18', }, campaign: {}, @@ -261,14 +261,14 @@ export const data = [ channel: 'web', context: { os: { - name: '', + Name: '', version: '', }, app: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.18', - namespace: 'com.rudderlabs.javascript', + Namespace: 'com.rudderlabs.javascript', }, page: { url: 'http://127.0.0.1:5500/index.html', @@ -291,7 +291,7 @@ export const data = [ }, traits: {}, library: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', version: '1.1.18', }, campaign: {}, @@ -342,14 +342,14 @@ export const data = [ channel: 'web', context: { os: { - name: '', + Name: '', version: '', }, app: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', build: '1.0.0', version: '1.1.18', - namespace: 'com.rudderlabs.javascript', + Namespace: 'com.rudderlabs.javascript', }, page: { url: 'http://127.0.0.1:5500/index.html', @@ -372,7 +372,7 @@ export const data = [ }, traits: {}, library: { - name: 'RudderLabs JavaScript SDK', + Name: 'RudderLabs JavaScript SDK', version: '1.1.18', }, campaign: {}, @@ -414,6 +414,239 @@ export const data = [ Name: 'bqstream test', }, }, + { + message: { + type: 'track', + 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', + 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', + }, + metadata: { + jobId: 6, + userId: 'user124', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, + { + message: { + type: 'track', + 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', + 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', + }, + metadata: { + jobId: 7, + userId: 'user125', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, + { + 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', + traits: { + count: 20, + productId: 20, + productName: 'Product-20', + }, + 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', + }, + metadata: { + jobId: 8, + userId: 'user125', + }, + destination: { + Config: { + rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', + projectId: 'gc-project-id', + datasetId: 'gc_dataset', + tableId: 'gc_table', + insertId: 'productId', + eventDelivery: true, + eventDeliveryTS: 1636965406397, + }, + Enabled: true, + ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', + Name: 'bqstream test', + }, + }, ], destType: 'bqstream', }, @@ -553,6 +786,76 @@ export const data = [ ], statusCode: 200, }, + { + batched: false, + destination: { + Config: { + datasetId: "gc_dataset", + eventDelivery: true, + eventDeliveryTS: 1636965406397, + insertId: "productId", + projectId: "gc-project-id", + rudderAccountId: "1z8LpaSAuFR9TPWL6fECZfjmRa-", + tableId: "gc_table", + }, + Enabled: true, + ID: "1WXjIHpu7ETXgjfiGPW3kCUgZFR", + Name: "bqstream test", + }, + error: "Invalid payload for the destination", + metadata: [ + { + jobId: 6, + userId: "user124", + }, + { + jobId: 7, + userId: "user125", + }, + ], + statTags: { + destType: "BQSTREAM", + errorCategory: "dataValidation", + errorType: "instrumentation", + feature: "router", + implementation: "native", + module: "destination", + }, + statusCode: 400, + }, + { + batched: false, + destination: { + Config: { + datasetId: "gc_dataset", + eventDelivery: true, + eventDeliveryTS: 1636965406397, + insertId: "productId", + projectId: "gc-project-id", + rudderAccountId: "1z8LpaSAuFR9TPWL6fECZfjmRa-", + tableId: "gc_table", + }, + Enabled: true, + ID: "1WXjIHpu7ETXgjfiGPW3kCUgZFR", + Name: "bqstream test", + }, + error: "Message Type not supported: identify", + metadata: [ + { + jobId: 8, + userId: "user125", + }, + ], + statTags: { + destType: "BQSTREAM", + errorCategory: "dataValidation", + errorType: "instrumentation", + feature: "router", + implementation: "native", + module: "destination", + }, + statusCode: 400, + }, ], }, }, From 2c77215e963afc2a153672cdfec1a0a6811f9a54 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Thu, 14 Sep 2023 11:36:54 +0530 Subject: [PATCH 13/15] fix: removing console --- src/v0/destinations/bqstream/utils.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/v0/destinations/bqstream/utils.test.js b/src/v0/destinations/bqstream/utils.test.js index a05059ca87..e4a75996ab 100644 --- a/src/v0/destinations/bqstream/utils.test.js +++ b/src/v0/destinations/bqstream/utils.test.js @@ -26,7 +26,6 @@ describe('getRearrangedEvents', () => { const eachUserErrorEventsList = [{ batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 3, userId: 'user12345' }] }, { batched: false, destination: {}, error: 'Message Type not supported: identify', metadata: [{ jobId: 4, userId: 'user12345' }] }]; const expected = [[{"batched":false,"destination":{},"error":"Message Type not supported: identify","metadata":[{"jobId":3,"userId":"user12345"},{"jobId":4,"userId":"user12345"}]}]]; const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList); - console.log(JSON.stringify(result)) expect(result).toEqual(expected); }); From f975bf8a13163a531bb93ba6582f218cc95fe356 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Mon, 18 Sep 2023 11:30:41 +0530 Subject: [PATCH 14/15] Revert "fix: resolve conflicts and trim down test cases" This reverts commit ca6f1f42e0c41f9f8701285f3e9dbfabf36e732f, reversing changes made to 2c77215e963afc2a153672cdfec1a0a6811f9a54. --- .github/workflows/build-pr-artifacts.yml | 4 +- .github/workflows/build-push-docker-image.yml | 90 +- .github/workflows/prepare-for-dev-deploy.yml | 4 +- CHANGELOG.md | 23 - package-lock.json | 567 +- package.json | 5 +- sample.env | 1 - src/adapters/networkhandler/authConstants.js | 2 +- .../destinations/fullstory/procWorkflow.yaml | 104 - .../launchdarkly_audience/config.js | 15 - .../launchdarkly_audience/procWorkflow.yaml | 67 - .../launchdarkly_audience/utils.js | 87 - .../launchdarkly_audience/utils.test.js | 136 - src/cdk/v2/handler.ts | 2 +- src/cdk/v2/utils.ts | 6 +- src/controllers/misc.ts | 18 - src/index.ts | 7 +- src/middleware.js | 19 - src/routes/misc.ts | 2 - src/services/misc.ts | 11 +- src/util/redis/redisConnector.js | 4 +- src/util/utils.js | 36 +- .../destinations/adobe_analytics/transform.js | 6 +- src/v0/destinations/bqstream/util.js | 36 +- src/v0/destinations/branch/transform.js | 6 +- .../campaign_manager/networkHandler.js | 19 +- .../campaign_manager/transform.js | 12 +- src/v0/destinations/customerio/transform.js | 2 +- src/v0/destinations/fb/transform.js | 12 +- .../config.js | 2 +- .../networkHandler.js | 22 +- .../transform.js | 30 +- .../config.js | 2 +- .../networkHandler.js | 25 +- .../utils.js | 43 +- .../utils.test.js | 8 +- .../config.js | 2 +- .../networkHandler.js | 22 +- .../transform.js | 37 +- src/v0/destinations/hs/util.js | 4 +- .../iterable/data/IterableTrackConfig.json | 5 - .../data/IterableTrackPurchaseConfig.json | 7 +- src/v0/destinations/klaviyo/transform.js | 31 +- src/v0/destinations/klaviyo/util.js | 2 +- src/v0/destinations/marketo/util.js | 81 +- src/v0/destinations/mp/transform.js | 39 - src/v0/destinations/mp/util.test.js | 5 +- src/v0/destinations/pardot/transform.js | 29 +- src/v0/destinations/redis/transform.js | 7 +- src/v0/destinations/slack/transform.js | 173 +- src/v0/destinations/slack/util.js | 6 +- .../networkHandler.js | 20 +- .../snapchat_custom_audience/transform.js | 26 +- .../tiktok_ads/data/TikTokTrack.json | 2 +- src/v0/destinations/twitter_ads/transform.js | 76 +- src/v0/util/index.js | 55 +- src/warehouse/index.js | 57 +- src/warehouse/util.js | 72 +- .../response.json | 18 +- .../proxy_response.json | 18 +- .../marketo_static_list/proxy_response.json | 32 +- test/__tests__/data/customerio_input.json | 132 +- test/__tests__/data/fullstory.json | 354 - ...e_adwords_enhanced_conversions_output.json | 10 +- ...ords_enhanced_conversions_proxy_input.json | 8 +- ...ds_enhanced_conversions_router_output.json | 4 +- .../google_adwords_offline_conversions.json | 40 +- ...words_offline_conversions_proxy_input.json | 12 +- ...ords_offline_conversions_proxy_output.json | 2 +- ...rds_offline_conversions_router_output.json | 8 +- ...ogle_adwords_remarketing_lists_output.json | 40 +- ...adwords_remarketing_lists_proxy_input.json | 8 +- ...words_remarketing_lists_router_output.json | 10 +- test/__tests__/data/hs_output.json | 2 +- test/__tests__/data/iterable.json | 3 - test/__tests__/data/klaviyo.json | 62 +- .../__tests__/data/launchdarkly_audience.json | 495 - .../data/marketo_static_list_proxy_input.json | 20 - .../marketo_static_list_proxy_output.json | 69 +- test/__tests__/data/mp_input.json | 25 +- test/__tests__/data/mp_output.json | 20 +- test/__tests__/data/pardot_router_output.json | 2 +- test/__tests__/data/redis_output.json | 2 +- test/__tests__/data/slack_input.json | 891 +- test/__tests__/data/slack_output.json | 103 +- ...snapchat_custom_audience_proxy_output.json | 1 - test/__tests__/data/twitter_ads.json | 6 +- .../integrations/jsonpaths/legacy/aliases.js | 427 - .../integrations/jsonpaths/legacy/extract.js | 278 - .../integrations/jsonpaths/legacy/groups.js | 432 - .../jsonpaths/legacy/identifies.js | 850 - .../integrations/jsonpaths/legacy/pages.js | 405 - .../integrations/jsonpaths/legacy/screens.js | 405 - .../integrations/jsonpaths/legacy/tracks.js | 830 - .../integrations/jsonpaths/new/aliases.js | 415 - .../integrations/jsonpaths/new/extract.js | 278 - .../integrations/jsonpaths/new/groups.js | 420 - .../integrations/jsonpaths/new/identifies.js | 850 - .../integrations/jsonpaths/new/pages.js | 393 - .../integrations/jsonpaths/new/screens.js | 393 - .../integrations/jsonpaths/new/tracks.js | 830 - test/__tests__/flatten_events.test.js | 44 +- test/__tests__/fullstory-cdk.test.ts | 32 - ...google_adwords_offline_conversions.test.js | 12 +- .../launchdarkly_audience-cdk.test.ts | 42 - test/__tests__/slack.test.js | 2 +- .../user_transformation_fetch.test.js | 7 +- test/__tests__/warehouse.test.js | 71 +- .../destinations/bqstream/router/data.ts | 469 +- .../destinations/kochava/processor/data.ts | 1404 - .../destinations/lambda/processor/data.ts | 498 - .../destinations/lambda/router/data.ts | 38788 ---------------- .../destinations/leanplum/processor/data.ts | 1708 - .../destinations/leanplum/router/data.ts | 370 - .../destinations/lemnisk/processor/data.ts | 1088 - .../destinations/lemnisk/router/data.ts | 664 - .../destinations/lytics/processor/data.ts | 1360 - .../destinations/lytics/router/data.ts | 351 - .../destinations/mailjet/processor/data.ts | 229 - .../destinations/mailjet/router/data.ts | 106 - .../destinations/mailmodo/processor/data.ts | 648 - .../destinations/mailmodo/router/data.ts | 294 - .../marketo_static_list/processor/data.ts | 1194 - .../marketo_static_list/router/data.ts | 1416 - .../destinations/moengage/processor/data.ts | 2780 -- .../destinations/moengage/router/data.ts | 480 - .../destinations/monetate/processor/data.ts | 2796 -- .../destinations/monetate/router/data.ts | 264 - .../destinations/ometria/processor/data.ts | 1078 - .../destinations/ometria/router/data.ts | 336 - .../destinations/one_signal/processor/data.ts | 1545 - .../destinations/one_signal/router/data.ts | 286 - .../destinations/pagerduty/processor/data.ts | 782 - .../destinations/pagerduty/router/data.ts | 309 - .../destinations/pardot/router/data.ts | 1017 - .../personalize/processor/data.ts | 4188 -- .../pinterest_tag/processor/data.ts | 3435 -- .../destinations/pinterest_tag/router/data.ts | 2153 - .../destinations/pinterest_tag/step/data.ts | 3358 -- 139 files changed, 1311 insertions(+), 86089 deletions(-) delete mode 100644 src/cdk/v2/destinations/fullstory/procWorkflow.yaml delete mode 100644 src/cdk/v2/destinations/launchdarkly_audience/config.js delete mode 100644 src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml delete mode 100644 src/cdk/v2/destinations/launchdarkly_audience/utils.js delete mode 100644 src/cdk/v2/destinations/launchdarkly_audience/utils.test.js delete mode 100644 test/__tests__/data/fullstory.json delete mode 100644 test/__tests__/data/launchdarkly_audience.json delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js delete mode 100644 test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js delete mode 100644 test/__tests__/fullstory-cdk.test.ts delete mode 100644 test/__tests__/launchdarkly_audience-cdk.test.ts delete mode 100644 test/integrations/destinations/kochava/processor/data.ts delete mode 100644 test/integrations/destinations/lambda/processor/data.ts delete mode 100644 test/integrations/destinations/lambda/router/data.ts delete mode 100644 test/integrations/destinations/leanplum/processor/data.ts delete mode 100644 test/integrations/destinations/leanplum/router/data.ts delete mode 100644 test/integrations/destinations/lemnisk/processor/data.ts delete mode 100644 test/integrations/destinations/lemnisk/router/data.ts delete mode 100644 test/integrations/destinations/lytics/processor/data.ts delete mode 100644 test/integrations/destinations/lytics/router/data.ts delete mode 100644 test/integrations/destinations/mailjet/processor/data.ts delete mode 100644 test/integrations/destinations/mailjet/router/data.ts delete mode 100644 test/integrations/destinations/mailmodo/processor/data.ts delete mode 100644 test/integrations/destinations/mailmodo/router/data.ts delete mode 100644 test/integrations/destinations/marketo_static_list/processor/data.ts delete mode 100644 test/integrations/destinations/marketo_static_list/router/data.ts delete mode 100644 test/integrations/destinations/moengage/processor/data.ts delete mode 100644 test/integrations/destinations/moengage/router/data.ts delete mode 100644 test/integrations/destinations/monetate/processor/data.ts delete mode 100644 test/integrations/destinations/monetate/router/data.ts delete mode 100644 test/integrations/destinations/ometria/processor/data.ts delete mode 100644 test/integrations/destinations/ometria/router/data.ts delete mode 100644 test/integrations/destinations/one_signal/processor/data.ts delete mode 100644 test/integrations/destinations/one_signal/router/data.ts delete mode 100644 test/integrations/destinations/pagerduty/processor/data.ts delete mode 100644 test/integrations/destinations/pagerduty/router/data.ts delete mode 100644 test/integrations/destinations/pardot/router/data.ts delete mode 100644 test/integrations/destinations/personalize/processor/data.ts delete mode 100644 test/integrations/destinations/pinterest_tag/processor/data.ts delete mode 100644 test/integrations/destinations/pinterest_tag/router/data.ts delete mode 100644 test/integrations/destinations/pinterest_tag/step/data.ts diff --git a/.github/workflows/build-pr-artifacts.yml b/.github/workflows/build-pr-artifacts.yml index 022afcd9f4..b0187beb85 100644 --- a/.github/workflows/build-pr-artifacts.yml +++ b/.github/workflows/build-pr-artifacts.yml @@ -43,7 +43,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -59,7 +59,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index f65aa0c8ce..7e36beba76 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -29,59 +29,9 @@ env: DOCKERHUB_USERNAME: rudderlabs jobs: - build-transformer-image-arm64: - name: Build Transformer Docker Image ARM64 - runs-on: [self-hosted, Linux, ARM64] - steps: - - name: Checkout - uses: actions/checkout@v3.5.3 - with: - fetch-depth: 1 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v2.9.1 - - - name: Login to DockerHub - uses: docker/login-action@v2.1.0 - with: - username: ${{ env.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - - - name: Build Docker Image - uses: docker/build-push-action@v4.1.1 - with: - context: . - file: ${{ inputs.dockerfile }} - target: ${{ inputs.load_target }} - load: true - tags: ${{ inputs.build_tag }} - # cache-from: type=gha - # cache-to: type=gha,mode=max - - - name: Run Tests - run: | - docker run ${{ inputs.build_tag }} npm run test:js:ci - docker run ${{ inputs.build_tag }} npm run test:ts:ci - - - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v4.1.1 - with: - context: . - file: ${{ inputs.dockerfile }} - target: ${{ inputs.push_target }} - push: true - tags: ${{ inputs.push_tags }}-arm64 - platforms: | - linux/arm64 - build-args: | - version=${{ inputs.img_tag }}-arm64 - GIT_COMMIT_SHA=${{ github.sha }} - # cache-from: type=gha - # cache-to: type=gha,mode=max - - build-transformer-image-amd64: - name: Build Transformer Docker Image AMD64 - runs-on: [self-hosted, Linux, X64] + build-transformer-image: + name: Build Transformer Docker Image + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3.5.3 @@ -105,12 +55,12 @@ jobs: target: ${{ inputs.load_target }} load: true tags: ${{ inputs.build_tag }} - # cache-from: type=gha - # cache-to: type=gha,mode=max + cache-from: type=gha + cache-to: type=gha,mode=max - name: Run Tests run: | - docker run ${{ inputs.build_tag }} npm run test:js:ci + docker run ${{ inputs.build_tag }} npm run test:js:ci docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images @@ -120,30 +70,12 @@ jobs: file: ${{ inputs.dockerfile }} target: ${{ inputs.push_target }} push: true - tags: ${{ inputs.push_tags }}-amd64 + tags: ${{ inputs.push_tags }} platforms: | linux/amd64 + linux/arm64 build-args: | - version=${{ inputs.img_tag }}-amd64 + version=${{ inputs.img_tag }} GIT_COMMIT_SHA=${{ github.sha }} - # cache-from: type=gha - # cache-to: type=gha,mode=max - - create-manifest: - name: Create multi-arch manifest - runs-on: ubuntu-latest - needs: [build-transformer-image-amd64, build-transformer-image-arm64] - - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.9.1 - - - name: Login to DockerHub - uses: docker/login-action@v2.1.0 - with: - username: ${{ env.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - - - name: Create multi-arch manifest - run: | - docker buildx imagetools create -t ${{ inputs.push_tags }} ${{ inputs.push_tags }}-amd64 ${{ inputs.push_tags }}-arm64 + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/prepare-for-dev-deploy.yml b/.github/workflows/prepare-for-dev-deploy.yml index d45f760c66..636ba5a6d8 100644 --- a/.github/workflows/prepare-for-dev-deploy.yml +++ b/.github/workflows/prepare-for-dev-deploy.yml @@ -51,7 +51,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name }} dockerfile: Dockerfile load_target: development @@ -67,7 +67,7 @@ jobs: uses: ./.github/workflows/build-push-docker-image.yml with: build_tag: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} - push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} + push_tags: rudderstack/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }},rudderlabs/develop-rudder-transformer:${{ needs.generate-tag-names.outputs.tag_name_ut }} img_tag: ${{ needs.generate-tag-names.outputs.tag_name_ut }} dockerfile: Dockerfile-ut-func load_target: development diff --git a/CHANGELOG.md b/CHANGELOG.md index e66ba72716..552026d41b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,29 +2,6 @@ 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.41.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.41.0...v1.41.1) (2023-09-14) - - -### Bug Fixes - -* **redis:** add destination_id in the key ([55629d6](https://github.com/rudderlabs/rudder-transformer/commit/55629d6d871d275de601a11ec223e0c283641d7b)) - -## [1.41.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.2...v1.41.0) (2023-09-11) - - -### Features - -* add support for updating profile properties through track call ([#2581](https://github.com/rudderlabs/rudder-transformer/issues/2581)) ([f0f20d6](https://github.com/rudderlabs/rudder-transformer/commit/f0f20d654ec5ee8eb078ce7f5610a4666d73fd8c)) -* **INT-580:** messageId to event_id mapping support ([#2570](https://github.com/rudderlabs/rudder-transformer/issues/2570)) ([b38843b](https://github.com/rudderlabs/rudder-transformer/commit/b38843bce9bc02d73dceedc6f751f402251fd23a)) -* **tiktok_ads:** messageId to event_id mapping support ([72f87bf](https://github.com/rudderlabs/rudder-transformer/commit/72f87bfa381ed7a5b74fb5907f932b78d0257ab9)) - - -### Bug Fixes - -* **bugsnag:** alerts ([266514b](https://github.com/rudderlabs/rudder-transformer/commit/266514bd56c150d6c88c1db0733a1da0a4367c02)) -* **bugsnag:** alerts ([#2580](https://github.com/rudderlabs/rudder-transformer/issues/2580)) ([9e9eeac](https://github.com/rudderlabs/rudder-transformer/commit/9e9eeacdf79cf8175f87f302242542060f668db8)) -* json paths for non tracks events for warehouse ([#2571](https://github.com/rudderlabs/rudder-transformer/issues/2571)) ([e455368](https://github.com/rudderlabs/rudder-transformer/commit/e45536805cf9545b73f4d5bf1be5fad1565ab075)) - ### [1.40.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.1...v1.40.2) (2023-09-06) diff --git a/package-lock.json b/package-lock.json index 1bd460d2ab..9372b3add9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.41.1", + "version": "1.40.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.41.1", + "version": "1.40.2", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "^0.7.24", @@ -18,8 +18,6 @@ "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", - "@pyroscope/nodejs": "^0.2.6", - "@rudderstack/workflow-engine": "^0.5.7", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", @@ -59,6 +57,7 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rudder-transformer-cdk": "^1.4.11", + "rudder-workflow-engine": "^0.4.7", "set-value": "^4.1.0", "sha256": "^0.2.0", "stacktrace-parser": "^0.1.10", @@ -3661,25 +3660,6 @@ "node": ">= 0.8" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, "node_modules/@ndhoule/extend": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", @@ -3739,135 +3719,6 @@ "node": ">=14" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@pyroscope/nodejs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.2.6.tgz", - "integrity": "sha512-F37ROH//HzO7zKm2S7CtNG8OAp+i4ADg4erQR9D57BrSgi8+3Jjp5s5PWqyJABC6IzsABgGrentPobBDr8QdsA==", - "dependencies": { - "axios": "^0.26.1", - "debug": "^4.3.3", - "form-data": "^4.0.0", - "pprof": "^3.2.0", - "regenerator-runtime": "^0.13.11", - "source-map": "^0.7.3" - }, - "engines": { - "node": "^12.20.0 || >=14.13.1" - } - }, - "node_modules/@pyroscope/nodejs/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "node_modules/@pyroscope/nodejs/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rudderstack/json-template-engine": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.5.5.tgz", - "integrity": "sha512-p3HdTqgZiJjjZmjaHN2paa1e87ifGE5UjkA4zdvge4bBzJbKKMQNWqRg6I96SwoA+hsxNkW/f9R83SPLU9t7LA==" - }, - "node_modules/@rudderstack/workflow-engine": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.5.7.tgz", - "integrity": "sha512-qR4eSiSFgYdOMtldR0rJ5kLGiTfnyufDfkMHNXFybxPb3jpjxBEGapj2lRiiTiRPgSUef7vuKyJ8BzY/VR4noA==", - "dependencies": { - "@aws-crypto/sha256-js": "^4.0.0", - "@rudderstack/json-template-engine": "^0.5.5", - "js-yaml": "^4.1.0", - "jsonata": "^2.0.3", - "lodash": "^4.17.21", - "object-sizeof": "^2.6.3" - } - }, - "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/sha256-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", - "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", - "dependencies": { - "@aws-crypto/util": "^4.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/util": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", - "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@rudderstack/workflow-engine/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -5116,11 +4967,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5268,6 +5114,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -5312,36 +5159,6 @@ "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", "dev": true }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -5642,14 +5459,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -6040,14 +5849,6 @@ "node": ">= 0.8.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/ci-info": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", @@ -6295,14 +6096,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/color/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -6533,11 +6326,6 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -8568,14 +8356,6 @@ "node": ">=8" } }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -9949,11 +9729,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "node_modules/filing-cabinet": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", @@ -10044,14 +9819,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", - "engines": { - "node": ">=0.8.22" - } - }, "node_modules/findup-sync": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", @@ -10223,33 +9990,6 @@ "node": ">=10" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10301,25 +10041,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10986,11 +10707,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "node_modules/has-value": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz", @@ -13495,11 +13211,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "node_modules/longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", @@ -13601,6 +13312,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -13615,6 +13327,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -13845,45 +13558,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocked-env": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz", @@ -14232,11 +13906,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -14380,20 +14049,6 @@ "node": ">=6.0" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -14444,17 +14099,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -14473,6 +14117,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14502,37 +14147,6 @@ "node": ">= 0.4" } }, - "node_modules/object-sizeof": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/object-sizeof/-/object-sizeof-2.6.3.tgz", - "integrity": "sha512-GNkVRrLh11Qr5BGr73dwwPE200/78QG2rbx30cnXPnMvt7UuttH4Dup5t+LtcQhARkg8Hbr0c8Kiz52+CFxYmw==", - "dependencies": { - "buffer": "^6.0.3" - } - }, - "node_modules/object-sizeof/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -14968,17 +14582,6 @@ "node": ">=0.10" } }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -15123,40 +14726,11 @@ "postcss": "^8.2.9" } }, - "node_modules/pprof": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pprof/-/pprof-3.2.1.tgz", - "integrity": "sha512-KnextTM3EHQ2zqN8fUjB0VpE+njcVR7cOfo7DjJSLKzIbKTPelDtokI04ScR/Vd8CLDj+M99tsaKV+K6FHzpzA==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "bindings": "^1.2.1", - "delay": "^5.0.0", - "findit2": "^2.2.3", - "nan": "^2.14.0", - "p-limit": "^3.0.0", - "pify": "^5.0.0", - "protobufjs": "~7.2.4", - "source-map": "^0.7.3", - "split": "^1.0.1" - }, - "engines": { - "node": ">=10.4.1" - } - }, "node_modules/pprof-format": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz", "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA==" }, - "node_modules/pprof/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, "node_modules/precinct": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", @@ -15537,29 +15111,6 @@ "node": ">= 6" } }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -15901,11 +15452,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, "node_modules/regexp-tree": { "version": "0.1.24", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", @@ -16145,6 +15691,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -16159,6 +15706,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16191,6 +15739,11 @@ "node": ">=12.0" } }, + "node_modules/rudder-json-template-engine": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/rudder-json-template-engine/-/rudder-json-template-engine-0.5.1.tgz", + "integrity": "sha512-D8zCcTXbhbFd2EhDmmgZKxw5uky6+DfikV/EW8I8HWdutMiyzdxgVMyH1dPo3feLgj3/0g2WNO9t4iPaegw4PQ==" + }, "node_modules/rudder-transformer-cdk": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz", @@ -16208,6 +15761,43 @@ "winston": "^3.8.1" } }, + "node_modules/rudder-workflow-engine": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rudder-workflow-engine/-/rudder-workflow-engine-0.4.7.tgz", + "integrity": "sha512-USJ/h4XGxtUmAhaTJgtz1MrICpiju6GTubaFyPS+5hgpjdIsZx/iOOishjrNcOrwHvxcfblccA8wv5JTC8eSpg==", + "dependencies": { + "@aws-crypto/sha256-js": "^4.0.0", + "js-yaml": "^4.1.0", + "jsonata": "^2.0.3", + "lodash": "^4.17.21", + "rudder-json-template-engine": "^0.5.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/sha256-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", + "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", + "dependencies": { + "@aws-crypto/util": "^4.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/util": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", + "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/rudder-workflow-engine/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -16329,6 +15919,7 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -16361,6 +15952,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -16371,12 +15963,14 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-value": { "version": "4.1.0", @@ -16581,6 +16175,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, "dependencies": { "through": "2" }, @@ -16911,6 +16506,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16953,12 +16549,14 @@ "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -17025,6 +16623,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -17361,35 +16960,6 @@ "node": ">=6" } }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -17455,7 +17025,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "4.0.2", @@ -18156,14 +17727,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index 1dd7f5e2fc..aecf5d581e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.41.1", + "version": "1.40.2", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { @@ -59,8 +59,6 @@ "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", "@ndhoule/extend": "^2.0.0", - "@pyroscope/nodejs": "^0.2.6", - "@rudderstack/workflow-engine": "^0.5.7", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", @@ -100,6 +98,7 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rudder-transformer-cdk": "^1.4.11", + "rudder-workflow-engine": "^0.4.7", "set-value": "^4.1.0", "sha256": "^0.2.0", "stacktrace-parser": "^0.1.10", diff --git a/sample.env b/sample.env index 71b11fbfca..02ef06c9c6 100644 --- a/sample.env +++ b/sample.env @@ -9,4 +9,3 @@ REDIS_PORT = 6379 REDIS_PASSWORD = 123 REDIS_USERNAME = abc USE_REDIS_DB = true -REDIS_EXPIRY_TIME_IN_SEC = 3600 \ No newline at end of file diff --git a/src/adapters/networkhandler/authConstants.js b/src/adapters/networkhandler/authConstants.js index f88361107a..c9a6a57835 100644 --- a/src/adapters/networkhandler/authConstants.js +++ b/src/adapters/networkhandler/authConstants.js @@ -2,6 +2,6 @@ * This class is used for handling Auth related errors */ module.exports = { + DISABLE_DEST: 'DISABLE_DESTINATION', REFRESH_TOKEN: 'REFRESH_TOKEN', - AUTH_STATUS_INACTIVE: 'AUTH_STATUS_INACTIVE', }; diff --git a/src/cdk/v2/destinations/fullstory/procWorkflow.yaml b/src/cdk/v2/destinations/fullstory/procWorkflow.yaml deleted file mode 100644 index 50ac2a8163..0000000000 --- a/src/cdk/v2/destinations/fullstory/procWorkflow.yaml +++ /dev/null @@ -1,104 +0,0 @@ -bindings: - - name: EventType - path: ../../../../constants - - path: ../../bindings/jsontemplate - exportAll: true - - name: removeUndefinedAndNullValues - path: ../../../../v0/util - -steps: - - name: validateInput - template: | - $.assert(.message.type, "message Type is not present. Aborting message."); - $.assert(.message.type in {{$.EventType.([.TRACK, .IDENTIFY])}}, - "message type " + .message.type + " is not supported"); - - name: prepareContext - template: | - $.context.messageType = .message.type.toLowerCase(); - $.context.payload = {}; - $.context.finalHeaders = { - "authorization": "Basic " + .destination.Config.apiKey, - "content-type": "application/json" - }; - - name: identifyPayload - condition: $.context.messageType == "identify" - template: | - $.context.endpoint = "https://api.fullstory.com/v2/users"; - $.context.payload.properties = .message.traits ?? .message.context.traits; - $.context.payload.uid = .message.userId; - $.context.payload.email = .message.context.traits.email; - $.context.payload.display_name = .message.context.traits.name; - - - name: trackPayload - condition: $.context.messageType == "track" - template: | - $.context.endpoint = "https://api.fullstory.com/v2/events"; - $.context.payload.name = .message.event; - $.context.payload.properties = .message.properties; - $.context.payload.timestamp = .message.originalTimestamp; - $.context.payload.context = {}; - - - name: validateEventName - condition: $.context.messageType == "track" - template: | - $.assert(.message.event, "event is required for track call") - - - name: mapContextFieldsForTrack - condition: $.context.messageType == "track" - template: | - $.context.payload.context.browser = { - "url": .message.context.page.url, - "user_agent": .message.context.userAgent, - "initial_referrer": .message.context.page.initial_referrer, - }; - $.context.payload.context.mobile = { - "app_name": .message.context.app.name, - "app_version": .message.context.app.version, - }; - $.context.payload.context.device = { - "manufacturer": .message.context.device.manufacturer, - "model": .message.context.device.model, - }; - $.context.payload.context.location = { - "ip_address": .message.context.ip, - "latitude": .message.properties.latitude, - "longitude": .message.properties.longitude, - "city": .message.properties.city, - "region": .message.properties.region, - "country": .message.properties.country, - }; - - - name: mapIdsForTrack - condition: $.context.messageType == "track" - template: | - $.context.payload.session = { - "id": .message.properties.sessionId, - "use_most_recent": .message.properties.useMostRecent, - }; - $.context.payload.user = { - "id": .message.properties.userId ?? .message.userId, - } - - - name: cleanPayload - template: | - $.context.payload = $.removeUndefinedAndNullValues($.context.payload); - - name: buildResponseForProcessTransformation - template: | - $.context.payload.({ - "body": { - "JSON": ., - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": $.context.endpoint, - "headers": $.context.finalHeaders, - "params": {}, - "files": {} - }) - - - diff --git a/src/cdk/v2/destinations/launchdarkly_audience/config.js b/src/cdk/v2/destinations/launchdarkly_audience/config.js deleted file mode 100644 index a1ec48a43c..0000000000 --- a/src/cdk/v2/destinations/launchdarkly_audience/config.js +++ /dev/null @@ -1,15 +0,0 @@ -const SUPPORTED_EVENT_TYPE = 'audiencelist'; -const ACTION_TYPES = ['add', 'remove']; -const IDENTIFIER_KEY = 'identifier'; -// ref:- https://docs.launchdarkly.com/guides/integrations/build-synced-segments?q=othercapabilities#manifest-details -// ref:- https://docs.launchdarkly.com/home/segments#targeting-users-in-segments -const ENDPOINT = 'https://app.launchdarkly.com/api/v2/segment-targets/rudderstack'; -const MAX_IDENTIFIERS = 1000; - -module.exports = { - SUPPORTED_EVENT_TYPE, - ACTION_TYPES, - IDENTIFIER_KEY, - ENDPOINT, - MAX_IDENTIFIERS, -}; diff --git a/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml b/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml deleted file mode 100644 index 48aad2bb79..0000000000 --- a/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml +++ /dev/null @@ -1,67 +0,0 @@ -bindings: - - name: EventType - path: ../../../../constants - - path: ../../bindings/jsontemplate - exportAll: true - - name: defaultRequestConfig - path: ../../../../v0/util - - name: removeUndefinedNullEmptyExclBoolInt - path: ../../../../v0/util - - path: ./config - exportAll: true - - path: ./utils - exportAll: true - -steps: - - name: validateInput - template: | - let messageType = .message.type; - $.assertConfig(.destination.Config.audienceId, "Audience Id is not present. Aborting"); - $.assertConfig(.destination.Config.audienceName, "Audience Name is not present. Aborting"); - $.assertConfig(.destination.Config.accessToken, "Access Token is not present. Aborting"); - $.assertConfig(.destination.Config.clientSideId, "Launch Darkly Client Side is not present. Aborting"); - $.assert(.message.type, "Message Type is not present. Aborting message."); - $.assert(.message.type.toLowerCase() === $.SUPPORTED_EVENT_TYPE, "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message."); - $.assert(.message.properties, "Message properties is not present. Aborting message."); - $.assert(.message.properties.listData, "`listData` is not present inside properties. Aborting message."); - $.assert($.containsAll(Object.keys(.message.properties.listData), $.ACTION_TYPES), "Unsupported action type. Aborting message.") - $.assert(Object.keys(.message.properties.listData).length > 0, "`listData` is empty. Aborting message.") - - - name: batchIdentifiersList - description: batch identifiers list - template: | - const batchedList = $.batchIdentifiersList(.message.properties.listData); - $.assert(batchedList.length > 0, "`listData` is empty. Aborting message."); - batchedList; - - - name: prepareBasePayload - template: | - const payload = { - environmentId: .destination.Config.clientSideId, - cohortId: .destination.Config.audienceId, - cohortName: .destination.Config.audienceName, - contextKind: .destination.Config.audienceType - }; - $.removeUndefinedNullEmptyExclBoolInt(payload); - - - name: buildResponseForProcessTransformation - description: build multiplexed response depending upon batch size - template: | - $.outputs.batchIdentifiersList.().({ - "body": { - "JSON": {...$.outputs.prepareBasePayload, listData: .}, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": {{$.ENDPOINT}}, - "headers": { - "Authorization": ^.destination.Config.accessToken, - "Content-Type": "application/json" - }, - "params": {}, - "files": {} - })[] diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.js deleted file mode 100644 index 5bbcdfb6a3..0000000000 --- a/src/cdk/v2/destinations/launchdarkly_audience/utils.js +++ /dev/null @@ -1,87 +0,0 @@ -const _ = require('lodash'); -const { ACTION_TYPES, IDENTIFIER_KEY, MAX_IDENTIFIERS } = require('./config'); - -/** - * Prepares a list of identifiers based on the provided data and identifier key. - * @param {*} listData The data containing lists of members to be added or removed from the audience. - * @returns - * { - "add": [ - { - "id": "test@gmail.com" - } - ], - "remove": [] - } - */ -const prepareIdentifiersList = (listData) => { - const list = {}; - const processList = (actionData) => - actionData - .filter((member) => member.hasOwnProperty(IDENTIFIER_KEY) && member[IDENTIFIER_KEY]) - .map((member) => ({ id: member[IDENTIFIER_KEY] })); - ACTION_TYPES.forEach((action) => { - list[action] = listData?.[action] ? processList(listData[action]) : []; - }); - return list; -}; - -/** - * Batch the identifiers list based on the maximum number of identifiers allowed per request. - * @param {*} listData The data containing lists of members to be added or removed from the audience. - * @returns - * For MAX_IDENTIFIERS = 2 - * [ - { - "add": [ - { - "id": "test1@gmail.com" - } - ], - "remove": [ - { - "id": "test2@gmail.com" - } - ] - }, - { - "add": [ - { - "id": "test3@gmail.com" - } - ], - "remove": [] - } - ] - */ -const batchIdentifiersList = (listData) => { - const audienceList = prepareIdentifiersList(listData); - const combinedList = [ - ...audienceList.add.map((item) => ({ ...item, type: 'add' })), - ...audienceList.remove.map((item) => ({ ...item, type: 'remove' })), - ]; - - const chunkedData = _.chunk(combinedList, MAX_IDENTIFIERS); - - // Group the chunks by action type (add/remove) - const groupedData = chunkedData.map((chunk) => { - const groupedChunk = { - add: [], - remove: [], - }; - - chunk.forEach((item) => { - if (item.type === 'add') { - groupedChunk.add.push({ id: item.id }); - } else if (item.type === 'remove') { - groupedChunk.remove.push({ id: item.id }); - } - }); - - return groupedChunk; - }); - - return groupedData; -}; - -module.exports = { prepareIdentifiersList, batchIdentifiersList }; diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js deleted file mode 100644 index 8c06c99076..0000000000 --- a/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js +++ /dev/null @@ -1,136 +0,0 @@ -const { prepareIdentifiersList, batchIdentifiersList } = require('./utils'); - -jest.mock(`./config`, () => { - const originalConfig = jest.requireActual(`./config`); - return { - ...originalConfig, - MAX_IDENTIFIERS: 2, - }; -}); - -describe('Unit test cases for prepareIdentifiersList', () => { - it('should return an object with empty "add" and "remove" properties when no data is provided', () => { - const result = prepareIdentifiersList({}); - expect(result).toEqual({ add: [], remove: [] }); - }); - - it('should handle null input and return an object with empty "add" and "remove" identifiers list', () => { - const result = prepareIdentifiersList(null); - expect(result).toEqual({ add: [], remove: [] }); - }); - - it('should handle undefined input and return an object with empty "add" and "remove" identifiers list', () => { - const result = prepareIdentifiersList(undefined); - expect(result).toEqual({ add: [], remove: [] }); - }); - - it('should handle input with missing "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => { - const result = prepareIdentifiersList({ add: [], remove: undefined }); - expect(result).toEqual({ add: [], remove: [] }); - }); - - it('should handle input with empty "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => { - const result = prepareIdentifiersList({ add: [], remove: [] }); - expect(result).toEqual({ add: [], remove: [] }); - }); - - it('should handle input with non empty "add" or "remove" identifiers list and return an object non empty "add" and "remove" identifiers list', () => { - const result = prepareIdentifiersList({ - add: [{ identifier: 'test1@email.com' }, { identifier: 'test2@email.com' }], - remove: [{ identifier: 'test3@email.com' }], - }); - expect(result).toEqual({ - add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], - remove: [{ id: 'test3@email.com' }], - }); - }); -}); - -describe('Unit test cases for batchIdentifiersList', () => { - it('should correctly batch a list containing both "add" and "remove" actions', () => { - const listData = { - add: [ - { identifier: 'test1@email.com' }, - { identifier: 'test2@email.com' }, - { identifier: 'test3@email.com' }, - ], - remove: [{ identifier: 'test4@email.com' }, { identifier: 'test5@email.com' }], - }; - - const expectedOutput = [ - { - add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], - remove: [], - }, - { - add: [{ id: 'test3@email.com' }], - remove: [{ id: 'test4@email.com' }], - }, - { - add: [], - remove: [{ id: 'test5@email.com' }], - }, - ]; - - expect(batchIdentifiersList(listData)).toEqual(expectedOutput); - }); - - it('should correctly batch a list containing only "add" actions', () => { - const listData = { - add: [ - { identifier: 'test1@email.com' }, - { identifier: 'test2@email.com' }, - { identifier: 'test3@email.com' }, - ], - remove: [], - }; - - const expectedOutput = [ - { - add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], - remove: [], - }, - { - add: [{ id: 'test3@email.com' }], - remove: [], - }, - ]; - - expect(batchIdentifiersList(listData)).toEqual(expectedOutput); - }); - - it('should correctly batch a list containing only "remove" actions', () => { - const listData = { - add: [], - remove: [ - { identifier: 'test1@email.com' }, - { identifier: 'test2@email.com' }, - { identifier: 'test3@email.com' }, - ], - }; - - const expectedOutput = [ - { - add: [], - remove: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }], - }, - { - add: [], - remove: [{ id: 'test3@email.com' }], - }, - ]; - - expect(batchIdentifiersList(listData)).toEqual(expectedOutput); - }); - - it('should return an empty list for empty input list data', () => { - const listData = { - add: [{ identifier: '' }], - remove: [], - }; - - const expectedOutput = []; - - expect(batchIdentifiersList(listData)).toEqual(expectedOutput); - }); -}); diff --git a/src/cdk/v2/handler.ts b/src/cdk/v2/handler.ts index 898e83f7b8..b4da9bc6bf 100644 --- a/src/cdk/v2/handler.ts +++ b/src/cdk/v2/handler.ts @@ -4,7 +4,7 @@ import { TemplateType, ExecutionBindings, StepOutput, -} from '@rudderstack/workflow-engine'; +} from 'rudder-workflow-engine'; import tags from '../../v0/util/tags'; diff --git a/src/cdk/v2/utils.ts b/src/cdk/v2/utils.ts index 9d46f3dace..096e5b7679 100644 --- a/src/cdk/v2/utils.ts +++ b/src/cdk/v2/utils.ts @@ -1,10 +1,6 @@ import path from 'path'; import fs from 'fs/promises'; -import { - WorkflowExecutionError, - WorkflowCreationError, - StatusError, -} from '@rudderstack/workflow-engine'; +import { WorkflowExecutionError, WorkflowCreationError, StatusError } from 'rudder-workflow-engine'; import logger from '../../logger'; import { generateErrorObject } from '../../v0/util'; import { PlatformError } from '../../v0/util/errorTypes'; diff --git a/src/controllers/misc.ts b/src/controllers/misc.ts index 92ec33f80f..eff0eee244 100644 --- a/src/controllers/misc.ts +++ b/src/controllers/misc.ts @@ -25,22 +25,4 @@ export default class MiscController { ctx.status = 200; return ctx; } - - public static async getCPUProfile(ctx: Context) { - const { seconds } = ctx.query; - let secondsData = 10; - // if seconds is not null and is not array then parseInt - if (seconds && !Array.isArray(seconds)) { - secondsData = parseInt(seconds, 10); - } - ctx.body = await MiscService.getCPUProfile(secondsData); - ctx.status = 200; - return ctx; - } - - public static async getHeapProfile(ctx: Context) { - ctx.body = await MiscService.getHeapProfile(); - ctx.status = 200; - return ctx; - } } diff --git a/src/index.ts b/src/index.ts index d1cc95cc36..92c54befca 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,7 @@ import cluster from './util/cluster'; import { router } from './legacy/router'; import { testRouter } from './testRouter'; import { metricsRouter } from './routes/metricsRouter'; -import { addStatMiddleware, addRequestSizeMiddleware, initPyroscope } from './middleware'; +import { addStatMiddleware, addRequestSizeMiddleware } from './middleware'; import { logProcessInfo } from './util/utils'; import { applicationRoutes, addSwaggerRoutes } from './routes'; import { RedisDB } from './util/redis/redisConnector'; @@ -15,11 +15,9 @@ import { RedisDB } from './util/redis/redisConnector'; dotenv.config(); const clusterEnabled = process.env.CLUSTER_ENABLED !== 'false'; const useUpdatedRoutes = process.env.ENABLE_NEW_ROUTES !== 'false'; -const port = parseInt(process.env.PORT ?? '9090', 10); +const port = parseInt(process.env.PORT || '9090', 10); const metricsPort = parseInt(process.env.METRICS_PORT || '9091', 10); -initPyroscope(); - const app = new Koa(); addStatMiddleware(app); @@ -32,6 +30,7 @@ app.use( jsonLimit: '200mb', }), ); + addRequestSizeMiddleware(app); addSwaggerRoutes(app); diff --git a/src/middleware.js b/src/middleware.js index 53aabc90e3..26ba4ee3bc 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,21 +1,5 @@ -const Pyroscope = require('@pyroscope/nodejs'); const stats = require('./util/stats'); -function initPyroscope() { - Pyroscope.init({ - appName: 'rudder-transformer', - }); - Pyroscope.startHeapCollecting(); -} - -function getCPUProfile(seconds) { - return Pyroscope.collectCpu(seconds); -} - -function getHeapProfile() { - return Pyroscope.collectHeap(); -} - function durationMiddleware() { return async (ctx, next) => { const startTime = new Date(); @@ -61,7 +45,4 @@ function addRequestSizeMiddleware(app) { module.exports = { addStatMiddleware, addRequestSizeMiddleware, - getHeapProfile, - getCPUProfile, - initPyroscope, }; diff --git a/src/routes/misc.ts b/src/routes/misc.ts index 3e30b9dd39..12ee09b8a9 100644 --- a/src/routes/misc.ts +++ b/src/routes/misc.ts @@ -10,7 +10,5 @@ router.get('/transformerBuildVersion', MiscController.buildVersion); // depricia router.get('/buildVersion', MiscController.buildVersion); router.get('/version', MiscController.version); router.get('/features', MiscController.features); -router.get('/debug/pprof/profile', MiscController.getCPUProfile); -router.get('/debug/pprof/heap', MiscController.getHeapProfile); export const miscRoutes = router.routes(); diff --git a/src/services/misc.ts b/src/services/misc.ts index 6d3e56ce1e..6508ced809 100644 --- a/src/services/misc.ts +++ b/src/services/misc.ts @@ -3,7 +3,6 @@ import path from 'path'; import { Context } from 'koa'; import { DestHandlerMap } from '../constants/destinationCanonicalNames'; import { Metadata } from '../types'; -import { getCPUProfile, getHeapProfile } from '../middleware'; export default class MiscService { public static getDestHandler(dest: string, version: string) { @@ -33,7 +32,7 @@ export default class MiscService { public static getMetaTags(metadata: Metadata) { if (!metadata) { - return {}; + return {} } return { sourceType: metadata.sourceType, @@ -63,12 +62,4 @@ export default class MiscService { const obj = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../features.json'), 'utf8')); return JSON.stringify(obj); } - - public static async getCPUProfile(seconds: number) { - return getCPUProfile(seconds); - } - - public static async getHeapProfile() { - return getHeapProfile(); - } } diff --git a/src/util/redis/redisConnector.js b/src/util/redis/redisConnector.js index 749e23ff83..5a61e683b6 100644 --- a/src/util/redis/redisConnector.js +++ b/src/util/redis/redisConnector.js @@ -32,7 +32,7 @@ const RedisDB = { log.error(`Redis is down at ${this.host}:${this.port}`); return false; // stop retrying }, - tls: {}, + tls: {} }); this.client.on('ready', () => { log.info(`Connected to redis at ${this.host}:${this.port}`); @@ -102,7 +102,7 @@ const RedisDB = { * @param {*} isValJson set to false if value is not a json object * */ - async setVal(key, value, expiryTimeInSec = process.env.REDIS_EXPIRY_TIME_IN_SEC || 3600) { + async setVal(key, value, expiryTimeInSec = 60 * 60) { try { await this.checkAndConnectConnection(); // check if redis is connected and if not, connect if (typeof value === 'object') { diff --git a/src/util/utils.js b/src/util/utils.js index 160bbae3c9..ee4b0f46be 100644 --- a/src/util/utils.js +++ b/src/util/utils.js @@ -10,22 +10,17 @@ const stats = require('./stats'); const resolver = new Resolver(); -const BLOCK_HOST_NAMES = process.env.BLOCK_HOST_NAMES || ''; -const BLOCK_HOST_NAMES_LIST = BLOCK_HOST_NAMES.split(','); -const LOCAL_HOST_NAMES_LIST = ['localhost', '127.0.0.1', '[::]', '[::1]']; -const LOCALHOST_OCTET = '127.'; +const LOCALHOST_IP = '127.0.0.1'; +const LOCALHOST_URL = `http://localhost`; const RECORD_TYPE_A = 4; // ipv4 const staticLookup = (transformerVersionId) => async (hostname, _, cb) => { let ips; const resolveStartTime = new Date(); try { - ips = await resolver.resolve4(hostname); + ips = await resolver.resolve(hostname); } catch (error) { - stats.timing('fetch_dns_resolve_time', resolveStartTime, { - transformerVersionId, - error: 'true', - }); + stats.timing('fetch_dns_resolve_time', resolveStartTime, { transformerVersionId, error: 'true' }); cb(null, `unable to resolve IP address for ${hostname}`, RECORD_TYPE_A); return; } @@ -37,8 +32,8 @@ const staticLookup = (transformerVersionId) => async (hostname, _, cb) => { } for (const ip of ips) { - if (ip.startsWith(LOCALHOST_OCTET)) { - cb(null, `cannot use ${ip} as IP address`, RECORD_TYPE_A); + if (ip.includes(LOCALHOST_IP)) { + cb(null, `cannot use ${LOCALHOST_IP} as IP address`, RECORD_TYPE_A); return; } } @@ -52,17 +47,8 @@ const httpAgentWithDnsLookup = (scheme, transformerVersionId) => { }; const blockLocalhostRequests = (url) => { - try { - const parseUrl = new URL(url); - const { hostname } = parseUrl; - if (LOCAL_HOST_NAMES_LIST.includes(hostname) || hostname.startsWith(LOCALHOST_OCTET)) { - throw new Error('localhost requests are not allowed'); - } - if (BLOCK_HOST_NAMES_LIST.includes(hostname)) { - throw new Error('blocked host requests are not allowed'); - } - } catch (error) { - throw new Error(`invalid url, ${error.message}`); + if (url.includes(LOCALHOST_URL) || url.includes(LOCALHOST_IP)) { + throw new Error('localhost requests are not allowed'); } }; @@ -177,14 +163,14 @@ const extractStackTraceUptoLastSubstringMatch = (trace, stringLiterals) => { const traceLines = trace.split('\n'); let lastRelevantIndex = 0; - for (let i = traceLines.length - 1; i >= 0; i -= 1) { - if (stringLiterals.some((str) => traceLines[i].includes(str))) { + for(let i = traceLines.length - 1; i >= 0; i -= 1) { + if (stringLiterals.some(str => traceLines[i].includes(str))) { lastRelevantIndex = i; break; } } - return traceLines.slice(0, lastRelevantIndex + 1).join('\n'); + return traceLines.slice(0, lastRelevantIndex + 1).join("\n"); }; module.exports = { diff --git a/src/v0/destinations/adobe_analytics/transform.js b/src/v0/destinations/adobe_analytics/transform.js index c477b4c93c..5daf11e62e 100644 --- a/src/v0/destinations/adobe_analytics/transform.js +++ b/src/v0/destinations/adobe_analytics/transform.js @@ -341,7 +341,7 @@ const handleTrack = (message, destinationConfig) => { let payload = null; // handle ecommerce events separately // generic events should go to the default - const event = typeof rawEvent === 'string' ? rawEvent.toLowerCase() : rawEvent; + const event = rawEvent?.toLowerCase(); switch (event) { case 'product viewed': case 'product list viewed': @@ -372,10 +372,10 @@ const handleTrack = (message, destinationConfig) => { payload = processTrackEvent(message, 'scOpen', destinationConfig); break; default: - if (destinationConfig.rudderEventsToAdobeEvents[event]) { + if (destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()]) { payload = processTrackEvent( message, - destinationConfig.rudderEventsToAdobeEvents[event]?.trim(), + destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()].trim(), destinationConfig, ); } else if (message?.properties?.overrideEventName) { diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index 75a9f532a5..aefdcc5d7c 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -5,10 +5,7 @@ const { getDynamicErrorType, processAxiosResponse, } = require('../../../adapters/utils/networkUtils'); -const { - REFRESH_TOKEN, - AUTH_STATUS_INACTIVE, -} = require('../../../adapters/networkhandler/authConstants'); +const { DISABLE_DEST, REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { isHttpStatusSuccess, isDefinedAndNotNull } = require('../../util'); const { proxyRequest } = require('../../../adapters/network'); const { UnhandledStatusCodeError, NetworkError, AbortedError } = require('../../util/errorTypes'); @@ -28,7 +25,7 @@ const trimBqStreamResponse = (response) => ({ * Obtains the Destination OAuth Error Category based on the error code obtained from destination * * - If an error code is such that the user will not be allowed inside the destination, - * such error codes fall under AUTH_STATUS_INACTIVE + * such error codes fall under DISABLE_DESTINATION * - If an error code is such that upon refresh we can get a new token which can be used to send event, * such error codes fall under REFRESH_TOKEN category * - If an error code doesn't fall under both categories, we can return an empty string @@ -38,7 +35,7 @@ const trimBqStreamResponse = (response) => ({ const getDestAuthCategory = (errorCategory) => { switch (errorCategory) { case 'PERMISSION_DENIED': - return AUTH_STATUS_INACTIVE; + return DISABLE_DEST; case 'UNAUTHENTICATED': return REFRESH_TOKEN; default: @@ -92,7 +89,7 @@ const getStatusAndCategory = (dresponse, status) => { * Retryable -> 5[0-9][02-9], 401(UNAUTHENTICATED) * "Special Cases": * status=200, resp.insertErrors.length > 0 === Failure - * 403 => AccessDenied -> AUTH_STATUS_INACTIVE, other 403 => Just abort + * 403 => AccessDenied -> DISABLE_DEST, other 403 => Just abort * */ const processResponse = ({ dresponse, status } = {}) => { @@ -149,7 +146,7 @@ function networkHandler() { /** * Optimizes the error response by merging the metadata of the same error type and adding it to the result array. - * + * * @param {Object} item - An object representing an error event with properties like `error`, `jobId`, and `metadata`. * @param {Map} errorMap - A Map object to store the error events and their metadata. * @param {Array} resultArray - An array to store the optimized error response. @@ -166,11 +163,11 @@ const optimizeErrorResponse = (item, errorMap, resultArray) => { errorMap.set(currentError, { ...item }); resultArray.push([errorMap.get(currentError)]); } -}; +} /** * Filters and splits an array of events based on whether they have an error or not. - * Returns an array of arrays, where inner arrays represent either a chunk of successful events or + * Returns an array of arrays, where inner arrays represent either a chunk of successful events or * an array of single error event. It maintains the order of events strictly. * * @param {Array} sortedEvents - An array of events to be filtered and split. @@ -178,21 +175,22 @@ const optimizeErrorResponse = (item, errorMap, resultArray) => { */ const restoreEventOrder = (sortedEvents) => { let successfulEventsChunk = []; - const resultArray = []; + const resultArray = [] const errorMap = new Map(); for (const item of sortedEvents) { - // if error is present, then push the previous successfulEventsChunk + // if error is present, then push the previous successfulEventsChunk // and then push the error event if (isDefinedAndNotNull(item.error)) { if (successfulEventsChunk.length > 0) { resultArray.push(successfulEventsChunk); successfulEventsChunk = []; } - optimizeErrorResponse(item, errorMap, resultArray); + optimizeErrorResponse(item, errorMap, resultArray); } else { // if error is not present, then push the event to successfulEventsChunk successfulEventsChunk.push(item); errorMap.clear(); + } } // Push the last successfulEventsChunk to resultArray @@ -202,13 +200,14 @@ const restoreEventOrder = (sortedEvents) => { return resultArray; }; + const convertMetadataToArray = (eventList) => { const processedEvents = eventList.map((event) => ({ ...event, metadata: Array.isArray(event.metadata) ? event.metadata : [event.metadata], })); return processedEvents; -}; +} /** * Takes in two arrays, eachUserSuccessEventslist and eachUserErrorEventsList, and returns an ordered array of events. @@ -237,7 +236,7 @@ const getRearrangedEvents = (eachUserSuccessEventslist, eachUserErrorEventsList) } // if there are no batched response, then return the error events if (eachUserSuccessEventslist.length === 0) { - const resultArray = []; + const resultArray = [] const errorMap = new Map(); processedErrorEvents.forEach((item) => { optimizeErrorResponse(item, errorMap, resultArray); @@ -246,15 +245,12 @@ const getRearrangedEvents = (eachUserSuccessEventslist, eachUserErrorEventsList) } // if there are both batched response and error events, then order them - const combinedTransformedEventList = [ - ...processedSuccessfulEvents, - ...processedErrorEvents, - ].flat(); + const combinedTransformedEventList = [...processedSuccessfulEvents, ...processedErrorEvents].flat(); const sortedEvents = _.sortBy(combinedTransformedEventList, (event) => event.metadata[0].jobId); const finalResp = restoreEventOrder(sortedEvents); return finalResp; -}; +} module.exports = { networkHandler, getRearrangedEvents }; diff --git a/src/v0/destinations/branch/transform.js b/src/v0/destinations/branch/transform.js index 362f6cc840..ae214819b2 100644 --- a/src/v0/destinations/branch/transform.js +++ b/src/v0/destinations/branch/transform.js @@ -46,11 +46,7 @@ function getCategoryAndName(rudderEventName) { let requiredCategory = null; // eslint-disable-next-line array-callback-return Object.keys(category.name).find((branchKey) => { - if ( - typeof branchKey === 'string' && - typeof rudderEventName === 'string' && - branchKey.toLowerCase() === rudderEventName.toLowerCase() - ) { + if (branchKey.toLowerCase() === rudderEventName.toLowerCase()) { requiredName = category.name[branchKey]; requiredCategory = category; } diff --git a/src/v0/destinations/campaign_manager/networkHandler.js b/src/v0/destinations/campaign_manager/networkHandler.js index a80fff6fe4..d324c6300b 100644 --- a/src/v0/destinations/campaign_manager/networkHandler.js +++ b/src/v0/destinations/campaign_manager/networkHandler.js @@ -1,5 +1,6 @@ const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); +const { isHttpStatusSuccess } = require('../../util/index'); +const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { processAxiosResponse, @@ -8,6 +9,20 @@ const { const { AbortedError, RetryableError, NetworkError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); +/** + * This function helps to detarmine type of error occured. According to the response + * we set authErrorCategory to take decision if we need to refresh the access_token + * or need to disable the destination. + * @param {*} code + * @returns + */ +const getAuthErrCategory = (code) => { + if (code === 401) { + return REFRESH_TOKEN; + } + return ''; +}; + function checkIfFailuresAreRetryable(response) { try { if (Array.isArray(response.status) && Array.isArray(response.status[0].errors)) { @@ -58,7 +73,7 @@ const responseHandler = (destinationResponse) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, destinationResponse, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(status), ); }; diff --git a/src/v0/destinations/campaign_manager/transform.js b/src/v0/destinations/campaign_manager/transform.js index 99e5fe9c57..93ec3e8ea3 100644 --- a/src/v0/destinations/campaign_manager/transform.js +++ b/src/v0/destinations/campaign_manager/transform.js @@ -7,7 +7,6 @@ const { removeUndefinedAndNullValues, isDefinedAndNotNull, simpleProcessRouterDest, - getAccessToken, } = require('../../util'); const { @@ -18,9 +17,16 @@ const { EncryptionSource, } = require('./config'); -const { InstrumentationError } = require('../../util/errorTypes'); +const { InstrumentationError, OAuthSecretError } = require('../../util/errorTypes'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const getAccessToken = ({ secret }) => { + if (!secret) { + throw new OAuthSecretError('[CAMPAIGN MANAGER (DCM)]:: OAuth - access token not found'); + } + return secret.access_token; +}; + function isEmptyObject(obj) { return Object.keys(obj).length === 0 && obj.constructor === Object; } @@ -30,7 +36,7 @@ function buildResponse(requestJson, metadata, endpointUrl, requestType, encrypti const response = defaultRequestConfig(); response.endpoint = endpointUrl; response.headers = { - Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`, + Authorization: `Bearer ${getAccessToken(metadata)}`, 'Content-Type': JSON_MIME_TYPE, }; response.method = defaultPostRequestConfig.requestMethod; diff --git a/src/v0/destinations/customerio/transform.js b/src/v0/destinations/customerio/transform.js index 5f953ee2f0..1dd5b29973 100644 --- a/src/v0/destinations/customerio/transform.js +++ b/src/v0/destinations/customerio/transform.js @@ -116,7 +116,7 @@ function processSingleMessage(message, destination) { const response = responseBuilder(message, evType, evName, destination, messageType); // replace default domain with EU data center domainc for EU based account - if (destination.Config?.datacenter === 'EU' || destination.Config?.datacenterEU) { + if (destination.Config.datacenterEU) { response.endpoint = response.endpoint.replace('track.customer.io', 'track-eu.customer.io'); } diff --git a/src/v0/destinations/fb/transform.js b/src/v0/destinations/fb/transform.js index a6a8b71e8d..a73bbdca8b 100644 --- a/src/v0/destinations/fb/transform.js +++ b/src/v0/destinations/fb/transform.js @@ -83,11 +83,7 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) { case 'ud[ln]': case 'ud[st]': case 'ud[cn]': - if ( - clonedUpdatedEvent[prop] && - typeof clonedUpdatedEvent[prop] === 'string' && - clonedUpdatedEvent[prop] !== '' - ) { + if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') { isUDSet = true; clonedUpdatedEvent[prop] = sha256(clonedUpdatedEvent[prop].toLowerCase()); } @@ -109,7 +105,8 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) { if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') { if (typeof clonedUpdatedEvent[prop] !== 'string') { delete clonedUpdatedEvent[prop]; - } else { + } + else { isUDSet = true; clonedUpdatedEvent[prop] = sha256( clonedUpdatedEvent[prop].toLowerCase() === 'female' ? 'f' : 'm', @@ -170,8 +167,7 @@ function getCorrectedTypedValue(pathToKey, value, originalPath) { } throw new InstrumentationError( - `${ - typeof originalPath === 'object' ? JSON.stringify(originalPath) : originalPath + `${typeof originalPath === 'object' ? JSON.stringify(originalPath) : originalPath } is not of valid type`, ); } diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/config.js b/src/v0/destinations/google_adwords_enhanced_conversions/config.js index 66d12c34d7..a86d0606a6 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/config.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers'; +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers'; const CONFIG_CATEGORIES = { TRACK_CONFIG: { type: 'track', name: 'trackConfig' }, diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index e79c568238..5349b74178 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -1,10 +1,8 @@ const { get, set } = require('lodash'); const sha256 = require('sha256'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); -const { - isHttpStatusSuccess, - getAuthErrCategoryFromErrDetailsAndStCode, -} = require('../../util/index'); +const { isHttpStatusSuccess } = require('../../util/index'); +const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config'); const Cache = require('../../util/cache'); @@ -17,6 +15,18 @@ const { const { BASE_ENDPOINT } = require('./config'); const { NetworkError, NetworkInstrumentationError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); +/** + * This function helps to detarmine type of error occured. According to the response + * we set authErrorCategory to take decision if we need to refresh the access_token + * or need to disable the destination. + * @param {*} code + * @param {*} response + * @returns + */ +const getAuthErrCategory = (code, response) => { + if (code === 401 && !get(response, 'error.details')) return REFRESH_TOKEN; + return ''; +}; /** * This function is used for collecting the conversionActionId using the conversion name @@ -58,7 +68,7 @@ const getConversionActionId = async (method, headers, params) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(gaecConversionActionIdResponse.status), }, gaecConversionActionIdResponse.response, - getAuthErrCategoryFromErrDetailsAndStCode( + getAuthErrCategory( get(gaecConversionActionIdResponse, 'status'), get(gaecConversionActionIdResponse, 'response[0].error.message'), ), @@ -124,7 +134,7 @@ const responseHandler = (destinationResponse) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategoryFromErrDetailsAndStCode(status, response), + getAuthErrCategory(status, response), ); }; // eslint-disable-next-line func-names diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js index 898c3f95b0..96ef089001 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js @@ -8,10 +8,13 @@ const { getValueFromMessage, removeHyphens, simpleProcessRouterDest, - getAccessToken, } = require('../../util'); -const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); +const { + InstrumentationError, + ConfigurationError, + OAuthSecretError, +} = require('../../util/errorTypes'); const { trackMapping, BASE_ENDPOINT } = require('./config'); const { JSON_MIME_TYPE } = require('../../util/constant'); @@ -33,13 +36,34 @@ const updateMappingJson = (mapping) => { return newMapping; }; +/** + * Get access token to be bound to the event req headers + * + * Note: + * This method needs to be implemented particular to the destination + * As the schema that we'd get in `metadata.secret` can be different + * for different destinations + * + * @param {Object} metadata + * @returns + */ +const getAccessToken = (metadata) => { + // OAuth for this destination + const { secret } = metadata; + // we would need to verify if secret is present and also if the access token field is present in secret + if (!secret || !secret.access_token) { + throw new OAuthSecretError('Empty/Invalid access token'); + } + return secret.access_token; +}; + const responseBuilder = async (metadata, message, { Config }, payload) => { const response = defaultRequestConfig(); const { event } = message; const filteredCustomerId = removeHyphens(Config.customerId); response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}:uploadConversionAdjustments`; response.body.JSON = payload; - const accessToken = getAccessToken(metadata, 'access_token'); + const accessToken = getAccessToken(metadata); response.headers = { Authorization: `Bearer ${accessToken}`, 'Content-Type': JSON_MIME_TYPE, diff --git a/src/v0/destinations/google_adwords_offline_conversions/config.js b/src/v0/destinations/google_adwords_offline_conversions/config.js index a02732894f..1d77af02e6 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/config.js +++ b/src/v0/destinations/google_adwords_offline_conversions/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const API_VERSION = 'v14'; +const API_VERSION = 'v13'; const BASE_ENDPOINT = `https://googleads.googleapis.com/${API_VERSION}/customers/:customerId`; diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index 71fdccff20..963721f024 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -2,11 +2,11 @@ const set = require('set-value'); const get = require('get-value'); const sha256 = require('sha256'); const { prepareProxyRequest, httpSend, httpPOST } = require('../../../adapters/network'); +const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { isHttpStatusSuccess, getHashFromArray, isDefinedAndNotNullAndNotEmpty, - getAuthErrCategoryFromStCode, } = require('../../util'); const { getConversionActionId } = require('./utils'); const Cache = require('../../util/cache'); @@ -24,6 +24,21 @@ const tags = require('../../util/tags'); const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL); +/** + * This function helps to determine the type of error occurred. We set the authErrorCategory + * as per the destination response that is received and take the decision whether + * to refresh the access_token or disable the destination. + * @param {*} status + * @returns + */ +const getAuthErrCategory = (status) => { + if (status === 401) { + // UNAUTHORIZED + return REFRESH_TOKEN; + } + return ''; +}; + const createJob = async (endpoint, headers, payload) => { const endPoint = `${endpoint}:create`; let createJobResponse = await httpPOST( @@ -42,7 +57,7 @@ const createJob = async (endpoint, headers, payload) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, status, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(status), ); } return response.resourceName.split('/')[3]; @@ -65,7 +80,7 @@ const addConversionToJob = async (endpoint, headers, jobId, payload) => { `[Google Ads Offline Conversions]:: ${addConversionToJobResponse.response?.error?.message} during google_ads_offline_store_conversions Add Conversion`, addConversionToJobResponse.status, addConversionToJobResponse.response, - getAuthErrCategoryFromStCode(get(addConversionToJobResponse, 'status')), + getAuthErrCategory(get(addConversionToJobResponse, 'status')), ); } return true; @@ -116,7 +131,7 @@ const getConversionCustomVariable = async (headers, params) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(searchStreamResponse.status), }, searchStreamResponse?.response || searchStreamResponse, - getAuthErrCategoryFromStCode(searchStreamResponse.status), + getAuthErrCategory(searchStreamResponse.status), ); } const conversionCustomVariable = get(searchStreamResponse, 'response.0.results'); @@ -277,7 +292,7 @@ const responseHandler = (destinationResponse) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_conversions response transformation`, status, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(status), ); }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index 6bdedcc0d4..6131b5dde7 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -11,9 +11,8 @@ const { getFieldValueFromMessage, isDefinedAndNotNullAndNotEmpty, isDefinedAndNotNull, - getAuthErrCategoryFromStCode, - getAccessToken, } = require('../../util'); +const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { SEARCH_STREAM, CONVERSION_ACTION_ID_CACHE_TTL, @@ -25,7 +24,12 @@ const { } = require('./config'); const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const Cache = require('../../util/cache'); -const { AbortedError, ConfigurationError, InstrumentationError } = require('../../util/errorTypes'); +const { + AbortedError, + OAuthSecretError, + ConfigurationError, + InstrumentationError, +} = require('../../util/errorTypes'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -39,6 +43,34 @@ const validateDestinationConfig = ({ Config }) => { } }; +/** + * for OAuth destination + * get access_token from metadata.secret{ ... } + * @param {*} param0 + * @returns + */ +const getAccessToken = ({ secret }) => { + if (!secret) { + throw new OAuthSecretError('OAuth - access token not found'); + } + return secret.access_token; +}; + +/** + * This function helps to determine the type of error occured. We set the authErrorCategory + * as per the destination response that is received and take the decision whether + * to refresh the access_token or disable the destination. + * @param {*} status + * @returns + */ +const getAuthErrCategory = (status) => { + if (status === 401) { + // UNAUTHORIZED + return REFRESH_TOKEN; + } + return ''; +}; + /** * get conversionAction using the conversion name using searchStream endpoint * @param {*} customerId @@ -68,7 +100,7 @@ const getConversionActionId = async (headers, params) => { )} during google_ads_offline_conversions response transformation`, searchStreamResponse.status, searchStreamResponse.response, - getAuthErrCategoryFromStCode(get(searchStreamResponse, 'status')), + getAuthErrCategory(get(searchStreamResponse, 'status')), ); } const conversionAction = get( @@ -162,7 +194,7 @@ const requestBuilder = ( } response.body.JSON = payload; response.headers = { - Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`, + Authorization: `Bearer ${getAccessToken(metadata)}`, 'Content-Type': 'application/json', 'developer-token': get(metadata, 'secret.developer_token'), }; @@ -358,6 +390,7 @@ const getClickConversionPayloadAndEndpoint = (message, Config, filteredCustomerI module.exports = { validateDestinationConfig, generateItemListFromProducts, + getAccessToken, getConversionActionId, removeHashToSha256TypeFromMappingJson, getStoreConversionPayload, diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js index 8deaa3ab0a..775e123cfe 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js @@ -161,7 +161,7 @@ describe('getExisitingUserIdentifier util tests', () => { describe('getClickConversionPayloadAndEndpoint util tests', () => { it('getClickConversionPayloadAndEndpoint flow check when default field identifier is present', () => { let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -187,7 +187,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { delete fittingPayload.traits.email; delete fittingPayload.properties.email; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -215,7 +215,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { delete fittingPayload.traits.phone; delete fittingPayload.properties.email; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', payload: { conversions: [ { @@ -251,7 +251,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => { }, ]; let expectedOutput = { - endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions', + endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions', payload: { conversions: [ { diff --git a/src/v0/destinations/google_adwords_remarketing_lists/config.js b/src/v0/destinations/google_adwords_remarketing_lists/config.js index 94059c69f1..902ac1cbff 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/config.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers'; +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers'; const CONFIG_CATEGORIES = { AUDIENCE_LIST: { type: 'audienceList', name: 'offlineDataJobs' }, ADDRESSINFO: { type: 'addressInfo', name: 'addressInfo' }, diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 979f263fcc..ceea51f6a2 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,8 +1,7 @@ const { httpSend, prepareProxyRequest } = require('../../../adapters/network'); -const { - isHttpStatusSuccess, - getAuthErrCategoryFromErrDetailsAndStCode, -} = require('../../util/index'); +const { isHttpStatusSuccess } = require('../../util/index'); + +const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { processAxiosResponse, @@ -118,6 +117,19 @@ const gaAudienceProxyRequest = async (request) => { return thirdResponse; }; +/** + * This function helps to detarmine type of error occured. According to the response + * we set authErrorCategory to take decision if we need to refresh the access_token + * or need to disable the destination. + * @param {*} code + * @param {*} response + * @returns + */ +const getAuthErrCategory = (code, response) => { + if (code === 401 && !response.error.details) return REFRESH_TOKEN; + return ''; +}; + const gaAudienceRespHandler = (destResponse, stageMsg) => { const { status, response } = destResponse; // const respAttributes = response["@attributes"] || null; @@ -130,7 +142,7 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategoryFromErrDetailsAndStCode(status, response), + getAuthErrCategory(status, response), ); }; diff --git a/src/v0/destinations/google_adwords_remarketing_lists/transform.js b/src/v0/destinations/google_adwords_remarketing_lists/transform.js index f8cd7c7037..e847e9f72a 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/transform.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/transform.js @@ -1,6 +1,6 @@ const sha256 = require('sha256'); -const get = require('get-value'); const logger = require('../../../logger'); +const get = require('get-value'); const { isDefinedAndNotNullAndNotEmpty, returnArrayOfSubarrays, @@ -11,10 +11,13 @@ const { removeHyphens, simpleProcessRouterDest, getDestinationExternalIDInfoForRetl, - getAccessToken, } = require('../../util'); -const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); +const { + InstrumentationError, + ConfigurationError, + OAuthSecretError, +} = require('../../util/errorTypes'); const { offlineDataJobsMapping, addressInfoMapping, @@ -35,6 +38,27 @@ const hashEncrypt = (object) => { }); }; +/** + * Get access token to be bound to the event req headers + * + * Note: + * This method needs to be implemented particular to the destination + * As the schema that we'd get in `metadata.secret` can be different + * for different destinations + * + * @param {Object} metadata + * @returns + */ +const getAccessToken = (metadata) => { + // OAuth for this destination + const { secret } = metadata; + // we would need to verify if secret is present and also if the access token field is present in secret + if (!secret || !secret.access_token) { + throw new OAuthSecretError('Empty/Invalid access token'); + } + return secret.access_token; +}; + /** * This function is used for building the response. It create a default rudder response * and populate headers, params and body.JSON @@ -49,14 +73,11 @@ const responseBuilder = (metadata, body, { Config }, message) => { const filteredCustomerId = removeHyphens(Config.customerId); response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}/offlineUserDataJobs`; response.body.JSON = removeUndefinedAndNullValues(payload); - const accessToken = getAccessToken(metadata, 'access_token'); + const accessToken = getAccessToken(metadata); let operationAudienceId = Config.audienceId || Config.listId; const mappedToDestination = get(message, MappedToDestinationKey); if (!operationAudienceId && mappedToDestination) { - const { objectType } = getDestinationExternalIDInfoForRetl( - message, - 'GOOGLE_ADWORDS_REMARKETING_LISTS', - ); + const { objectType } = getDestinationExternalIDInfoForRetl(message, 'GOOGLE_ADWORDS_REMARKETING_LISTS'); operationAudienceId = objectType; } if (!isDefinedAndNotNullAndNotEmpty(operationAudienceId)) { diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js index 11f7a892d5..63c3eb118f 100644 --- a/src/v0/destinations/hs/util.js +++ b/src/v0/destinations/hs/util.js @@ -429,9 +429,7 @@ const getEventAndPropertiesFromConfig = (message, destination, payload) => { }); if (!hubspotEventFound) { - throw new ConfigurationError( - `Event name '${event}' mappings are not configured in the destination`, - ); + throw new ConfigurationError(`'${event}' event name not found`); } // 2. fetch event properties from webapp config diff --git a/src/v0/destinations/iterable/data/IterableTrackConfig.json b/src/v0/destinations/iterable/data/IterableTrackConfig.json index 28fdcaecc7..1a751e2fe4 100644 --- a/src/v0/destinations/iterable/data/IterableTrackConfig.json +++ b/src/v0/destinations/iterable/data/IterableTrackConfig.json @@ -21,11 +21,6 @@ ], "required": false }, - { - "destKey": "id", - "sourceKeys": ["properties.id", "properties.event_id"], - "required": false - }, { "destKey": "eventName", "sourceKeys": "event", diff --git a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json index 00e83d0125..08014dec3f 100644 --- a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json +++ b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json @@ -6,12 +6,7 @@ }, { "destKey": "id", - "sourceKeys": [ - "properties.order_id", - "properties.orderId", - "properties.id", - "properties.event_id" - ], + "sourceKeys": "properties.orderId", "required": false }, { diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index bb19c5f8fd..d7170ce789 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -42,10 +42,9 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); /** * Main Identify request handler func * The function is used to create/update new users and also for adding/subscribing - * users to the list. - * DOCS: 1. https://developers.klaviyo.com/en/v2023-02-22/reference/create_profile - * 2. https://developers.klaviyo.com/en/v2023-02-22/reference/update_profile - * 3. https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles + * members to the list depending on conditons.If listId is there member is added to that list & + * if subscribe is true member is subscribed to that list else not. + * DOCS: https://www.klaviyo.com/docs/http-api * @param {*} message * @param {*} category * @param {*} destination @@ -124,7 +123,7 @@ const identifyRequestHandler = async (message, category, destination) => { // ---------------------- // Main handler func for track request/screen request // User info needs to be mapped to a track event (mandatory) -// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/create_event +// DOCS: https://www.klaviyo.com/docs/http-api // ---------------------- const trackRequestHandler = (message, category, destination) => { @@ -139,6 +138,10 @@ const trackRequestHandler = (message, category, destination) => { attributes.metric = { name: eventName }; const categ = CONFIG_CATEGORIES[eventMap]; attributes.properties = constructPayload(message.properties, MAPPING_CONFIG[categ.name]); + attributes.properties = { + ...attributes.properties, + ...populateCustomFieldsFromTraits(message), + }; // products mapping using Items.json // mapping properties.items to payload.properties.items and using properties.products as a fallback to properties.items @@ -188,21 +191,17 @@ const trackRequestHandler = (message, category, destination) => { if (value) { attributes.value = value; } + attributes.properties = { + ...attributes.properties, + ...populateCustomFieldsFromTraits(message), + }; } // if flattenProperties is enabled from UI, flatten the event properties attributes.properties = flattenProperties ? flattenJson(attributes.properties, '.', 'normal', false) : attributes.properties; // Map user properties to profile object - attributes.profile = { - ...createCustomerProperties(message, destination.Config), - ...populateCustomFieldsFromTraits(message), - }; - - attributes.profile = flattenProperties - ? flattenJson(attributes.profile, '.', 'normal', false) - : attributes.profile; - + attributes.profile = createCustomerProperties(message, destination.Config); if (message.timestamp) { attributes.time = message.timestamp; } @@ -223,9 +222,9 @@ const trackRequestHandler = (message, category, destination) => { // ---------------------- // Main handlerfunc for group request -// we will add/subscribe users to the list +// we will map user to list (subscribe and/or member) // based on property sent -// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles +// DOCS: https://www.klaviyo.com/docs/api/v2/lists // ---------------------- const groupRequestHandler = (message, category, destination) => { if (!message.groupId) { diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 3c4882b834..8fb9f0e875 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -96,7 +96,7 @@ const profileUpdateResponseBuilder = (payload, profileId, category, privateApiKe /** * This function is used for creating response for subscribing users to a particular list. - * DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles + * DOCS: https://www.klaviyo.com/docs/api/v2/lists */ const subscribeUserToList = (message, traitsInfo, destination) => { // listId from message properties are preferred over Config listId diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js index 0de14e2072..ab39aafc15 100644 --- a/src/v0/destinations/marketo/util.js +++ b/src/v0/destinations/marketo/util.js @@ -19,8 +19,6 @@ const tags = require('../../util/tags'); * https://developers.marketo.com/rest-api/error-codes/ */ -const ERROR_CODE_TO_PASS = ['1015']; - const MARKETO_RETRYABLE_CODES = ['601', '602', '604', '611']; const MARKETO_ABORTABLE_CODES = [ '600', @@ -36,28 +34,29 @@ const MARKETO_ABORTABLE_CODES = [ ]; const MARKETO_THROTTLED_CODES = ['502', '606', '607', '608', '615']; -// Keeping here for reference const RECORD_LEVEL_ABORTBALE_ERRORS = [ -// '1001', -// '1002', -// '1003', -// '1004', -// '1005', -// '1006', -// '1007', -// '1008', -// '1011', -// '1013', -// '1014', -// '1016', -// '1017', -// '1018', -// '1021', -// '1026', -// '1027', -// '1028', -// '1036', -// '1049', -// ]; +const RECORD_LEVEL_ABORTBALE_ERRORS = [ + '1001', + '1002', + '1003', + '1004', + '1005', + '1006', + '1007', + '1008', + '1011', + '1013', + '1014', + '1015', + '1016', + '1017', + '1018', + '1021', + '1026', + '1027', + '1028', + '1036', + '1049', +]; const { DESTINATION } = require('./config'); const logger = require('../../../logger'); @@ -87,7 +86,7 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat }; /** * this function checks the status of individual responses and throws error if any - * response status does not match the expected status + * response ststus does not match the expected status * doc1: https://developers.marketo.com/rest-api/lead-database/custom-objects/#create_and_update * doc2: https://developers.marketo.com/rest-api/lead-database/#create_and_update * Structure of marketoResponse: { @@ -123,32 +122,20 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat const nestedResponseHandler = (marketoResponse, sourceMessage) => { const checkStatus = (res) => { const { status } = res; - const allowedStatus = ['updated', 'added', 'removed', 'created']; - if ( - status && - !allowedStatus.includes(status) - // we need to check the case where the id are not in list - ) { + if (status && status !== 'updated' && status !== 'created' && status !== 'added') { const { reasons } = res; let statusCode = 400; - if (reasons) { - const errorCodesFromDest = reasons.map((reason) => reason.code); - const filteredErrorCode = errorCodesFromDest.find( - (errorCode) => !ERROR_CODE_TO_PASS.includes(errorCode), - ); - if (!filteredErrorCode) { - return; - } - if (MARKETO_THROTTLED_CODES.includes(filteredErrorCode)) { - statusCode = 429; - } else if (MARKETO_RETRYABLE_CODES.includes(filteredErrorCode)) { - statusCode = 500; - } + if (reasons && RECORD_LEVEL_ABORTBALE_ERRORS.includes(reasons[0].code)) { + statusCode = 400; + } else if (reasons && MARKETO_ABORTABLE_CODES.includes(reasons[0].code)) { + statusCode = 400; + } else if (reasons && MARKETO_THROTTLED_CODES.includes(reasons[0].code)) { + statusCode = 429; + } else if (reasons && MARKETO_RETRYABLE_CODES.includes(reasons[0].code)) { + statusCode = 500; } throw new InstrumentationError( - `Request failed during: ${sourceMessage}, error: ${ - JSON.stringify(reasons) || 'Reason(s) not Found' - }`, + `Request failed during: ${sourceMessage}, error: ${JSON.stringify(reasons)}`, statusCode, { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(statusCode), diff --git a/src/v0/destinations/mp/transform.js b/src/v0/destinations/mp/transform.js index 425b7a8249..0cb06aad93 100644 --- a/src/v0/destinations/mp/transform.js +++ b/src/v0/destinations/mp/transform.js @@ -130,37 +130,6 @@ const processRevenueEvents = (message, destination, revenueValue) => { return responseBuilderSimple(payload, message, 'revenue', destination.Config); }; -/** - * This function is used to process the incremental properties - * ref :- https://developer.mixpanel.com/reference/profile-numerical-add - * @param {*} message - * @param {*} destination - * @param {*} propIncrements - * @returns - */ -const processIncrementalProperties = (message, destination, propIncrements) => { - const payload = { - $add: {}, - $token: destination.Config.token, - $distinct_id: message.userId || message.anonymousId, - }; - - if (destination?.Config.identityMergeApi === 'simplified') { - payload.$distinct_id = message.userId || `$device:${message.anonymousId}`; - } - - Object.keys(message.properties).forEach((prop) => { - const value = message.properties[prop]; - if (value && propIncrements.includes(prop)) { - payload.$add[prop] = value; - } - }); - - return Object.keys(payload.$add).length > 0 - ? responseBuilderSimple(payload, message, 'incremental_properties', destination.Config) - : null; -}; - const getEventValueForTrackEvent = (message, destination) => { const mappedProperties = constructPayload(message, mPEventPropertiesConfigJson); // This is to conform with SDKs sending timestamp component with messageId @@ -209,14 +178,6 @@ const processTrack = (message, destination) => { if (revenue) { returnValue.push(processRevenueEvents(message, destination, revenue)); } - - if (Array.isArray(destination.Config.propIncrements)) { - const propIncrements = destination.Config.propIncrements.map((item) => item.property); - const response = processIncrementalProperties(message, destination, propIncrements); - if (response) { - returnValue.push(response); - } - } returnValue.push(getEventValueForTrackEvent(message, destination)); return returnValue; }; diff --git a/src/v0/destinations/mp/util.test.js b/src/v0/destinations/mp/util.test.js index c5cd5b61e8..2434564699 100644 --- a/src/v0/destinations/mp/util.test.js +++ b/src/v0/destinations/mp/util.test.js @@ -1,4 +1,7 @@ -const { combineBatchRequestsWithSameJobIds } = require('./util'); +const { + combineBatchRequestsWithSameJobIds, + combineBatchRequestsWithSameJobIds2, +} = require('./util'); const destinationMock = { Config: { diff --git a/src/v0/destinations/pardot/transform.js b/src/v0/destinations/pardot/transform.js index bfc7386ef9..128d72cb14 100644 --- a/src/v0/destinations/pardot/transform.js +++ b/src/v0/destinations/pardot/transform.js @@ -45,10 +45,33 @@ const { getSuccessRespEvents, checkInvalidRtTfEvents, handleRtTfSingleEventError, - getAccessToken, } = require('../../util'); const { CONFIG_CATEGORIES } = require('./config'); -const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes'); +const { + OAuthSecretError, + ConfigurationError, + InstrumentationError, +} = require('../../util/errorTypes'); + +/** + * Get access token to be bound to the event req headers + * + * Note: + * This method needs to be implemented particular to the destination + * As the schema that we'd get in `metadata.secret` can be different + * for different destinations + * + * @param {Object} metadata + * @returns + */ +const getAccessToken = (metadata) => { + // OAuth for this destination + const { secret } = metadata; + if (!secret) { + throw new OAuthSecretError('Empty/Invalid access token'); + } + return secret.access_token; +}; const buildResponse = (payload, url, destination, token) => { const responseBody = removeUndefinedValues(payload); @@ -99,7 +122,7 @@ const getUrl = (urlParams) => { const processIdentify = ({ message, metadata }, destination, category) => { const { campaignId } = destination.Config; - const accessToken = getAccessToken(metadata, 'access_token'); + const accessToken = getAccessToken(metadata); let extId = get(message, 'context.externalId'); extId = extId && extId.length > 0 ? extId[0] : null; diff --git a/src/v0/destinations/redis/transform.js b/src/v0/destinations/redis/transform.js index 124569c8e8..f57cadb7e6 100644 --- a/src/v0/destinations/redis/transform.js +++ b/src/v0/destinations/redis/transform.js @@ -31,9 +31,9 @@ const isSubEventTypeProfiles = (message) => { return sources.profiles_entity && sources.profiles_id_type && sources.profiles_model; }; -const transformSubEventTypeProfiles = (message, workspaceId, destinationId) => { +const transforrmSubEventTypeProfiles = (message, workspaceId) => { // form the hash - const hash = `${workspaceId}:${destinationId}:${message.context.sources.profiles_entity}:${message.context.sources.profiles_id_type}:${message.userId}`; + const hash = `${workspaceId}:${message.context.sources.profiles_entity}:${message.context.sources.profiles_id_type}:${message.userId}`; const key = `${message.context.sources.profiles_model}`; const value = JSON.stringify(message.traits); return { @@ -59,12 +59,11 @@ const process = (event) => { } const { prefix } = destination.Config; - const destinationId = destination.ID; const keyPrefix = isEmpty(prefix) ? '' : `${prefix.trim()}:`; if (isSubEventTypeProfiles(message)) { const { workspaceId } = metadata; - return transformSubEventTypeProfiles(message, workspaceId, destinationId); + return transforrmSubEventTypeProfiles(message, workspaceId); } const hmap = { diff --git a/src/v0/destinations/slack/transform.js b/src/v0/destinations/slack/transform.js index b56ebfbc48..ee58b63dff 100644 --- a/src/v0/destinations/slack/transform.js +++ b/src/v0/destinations/slack/transform.js @@ -16,38 +16,25 @@ const { defaultRequestConfig, getFieldValueFromMessage, simpleProcessRouterDest, - isDefinedAndNotNull, } = require('../../util'); const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes'); // build the response to be sent to backend, url encoded header is required as slack accepts payload in this format // add the username and image for Rudder // image currently served from prod CDN -const buildResponse = ( - payloadJSON, - message, - destination, - channelWebhook = null, - sendAppNameAndIcon = true, -) => { - const endpoint = channelWebhook || destination.Config.webhookUrl; +const buildResponse = (payloadJSON, message, destination) => { + const endpoint = destination.Config.webhookUrl; const response = defaultRequestConfig(); response.endpoint = endpoint; response.method = defaultPostRequestConfig.requestMethod; response.headers = { 'Content-Type': 'application/x-www-form-urlencoded' }; response.userId = message.userId ? message.userId : message.anonymousId; - const payload = - sendAppNameAndIcon === true - ? JSON.stringify({ - ...payloadJSON, - username: SLACK_USER_NAME, - icon_url: SLACK_RUDDER_IMAGE_URL, - }) - : JSON.stringify({ - ...payloadJSON, - }); response.body.FORM = { - payload, + payload: JSON.stringify({ + ...payloadJSON, + username: SLACK_USER_NAME, + icon_url: SLACK_RUDDER_IMAGE_URL, + }), }; response.statusCode = 200; logger.debug(response); @@ -55,15 +42,21 @@ const buildResponse = ( }; const processIdentify = (message, destination) => { + // debug(JSON.stringify(destination)); const identifyTemplateConfig = destination.Config.identifyTemplate; const traitsList = getWhiteListedTraits(destination); const defaultIdentifyTemplate = 'Identified {{name}}'; logger.debug('defaulTraitsList:: ', traitsList); const uName = getName(message); + // required traitlist ?? + /* if (!traitsList || traitsList.length == 0) { + throw Error("traits list in config not present"); + } */ + const template = Handlebars.compile( (identifyTemplateConfig - ? identifyTemplateConfig.trim()?.length === 0 + ? identifyTemplateConfig.trim().length === 0 ? undefined : identifyTemplateConfig : undefined) || @@ -76,7 +69,7 @@ const processIdentify = (message, destination) => { logger.debug( 'identifyTemplateConfig: ', (identifyTemplateConfig - ? identifyTemplateConfig.trim()?.length === 0 + ? identifyTemplateConfig.trim().length === 0 ? undefined : identifyTemplateConfig : undefined) || @@ -102,40 +95,18 @@ const processIdentify = (message, destination) => { return buildResponse({ text: resultText }, message, destination); }; -const isEventNameMatchesRegex = (eventName, regex) => eventName.match(regex)?.length > 0; - -const getChannelForEventName = (eventChannelSettings, eventName) => { - for (const channelConfig of eventChannelSettings) { - const configEventName = - channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null; - const channelWebhook = - channelConfig?.eventChannelWebhook?.length > 0 ? channelConfig.eventChannelWebhook : null; - - if (configEventName && isDefinedAndNotNull(channelWebhook)) { - if (channelConfig.eventRegex) { - logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`); - logger.debug( - 'match:: ', - configEventName, - eventName, - eventName.match(new RegExp(configEventName, 'g')), - ); - if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { - return channelWebhook; - } - } else if (channelConfig.eventName === eventName) { - return channelWebhook; - } - } - } - return null; -}; -const getChannelNameForEvent = (eventChannelSettings, eventName) => { - for (const channelConfig of eventChannelSettings) { - const configEventName = - channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null; - const configEventChannel = - channelConfig?.eventChannel?.trim()?.length > 0 ? channelConfig.eventChannel : null; +function buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName) { + eventChannelConfig.forEach((channelConfig) => { + const configEventName = channelConfig.eventName + ? channelConfig.eventName.trim().length > 0 + ? channelConfig.eventName + : undefined + : undefined; + const configEventChannel = channelConfig.eventChannel + ? channelConfig.eventChannel.trim().length > 0 + ? channelConfig.eventChannel + : undefined + : undefined; if (configEventName && configEventChannel) { if (channelConfig.eventRegex) { logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`); @@ -145,29 +116,37 @@ const getChannelNameForEvent = (eventChannelSettings, eventName) => { eventName, eventName.match(new RegExp(configEventName, 'g')), ); - if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { - return configEventChannel; + if ( + eventName.match(new RegExp(configEventName, 'g')) && + eventName.match(new RegExp(configEventName, 'g')).length > 0 + ) { + channelListToSendThisEvent.add(configEventChannel); } } else if (configEventName === eventName) { - return configEventChannel; + channelListToSendThisEvent.add(configEventChannel); } } - } - return null; -}; + }); +} -const buildtemplateList = (templateListForThisEvent, eventTemplateSettings, eventName) => { - eventTemplateSettings.forEach((templateConfig) => { - const configEventName = - templateConfig?.eventName?.trim()?.length > 0 ? templateConfig.eventName : undefined; +function buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName) { + eventTemplateConfig.forEach((templateConfig) => { + const configEventName = templateConfig.eventName + ? templateConfig.eventName.trim().length > 0 + ? templateConfig.eventName + : undefined + : undefined; const configEventTemplate = templateConfig.eventTemplate - ? templateConfig.eventTemplate.trim()?.length > 0 + ? templateConfig.eventTemplate.trim().length > 0 ? templateConfig.eventTemplate : undefined : undefined; if (configEventName && configEventTemplate) { if (templateConfig.eventRegex) { - if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) { + if ( + eventName.match(new RegExp(configEventName, 'g')) && + eventName.match(new RegExp(configEventName, 'g')).length > 0 + ) { templateListForThisEvent.add(configEventTemplate); } } else if (configEventName === eventName) { @@ -175,47 +154,32 @@ const buildtemplateList = (templateListForThisEvent, eventTemplateSettings, even } } }); -}; +} const processTrack = (message, destination) => { // logger.debug(JSON.stringify(destination)); - const { Config } = destination; - const { eventChannelSettings, eventTemplateSettings, incomingWebhooksType, blacklistedEvents } = - Config; - const eventName = message.event; + const eventChannelConfig = destination.Config.eventChannelSettings; + const eventTemplateConfig = destination.Config.eventTemplateSettings; - if (!eventName) { + if (!message.event) { throw new InstrumentationError('Event name is required'); } - if (blacklistedEvents?.length > 0) { - const blackListedEvents = blacklistedEvents.map((item) => item.eventName); - if (blackListedEvents.includes(eventName)) { - throw new ConfigurationError('Event is blacklisted. Please check configuration.'); - } - } - + const eventName = message.event; + const channelListToSendThisEvent = new Set(); const templateListForThisEvent = new Set(); const traitsList = getWhiteListedTraits(destination); - /* Add global context to regex always - * build the channel list and template list for the event, pick the first in case of multiple - * using set to filter out - * document this behaviour - */ + // Add global context to regex always + // build the channel list and templatelist for the event, pick the first in case of multiple + // using set to filter out + // document this behaviour - // getting specific channel for event if available - - let channelWebhook; - let channelName; - if (incomingWebhooksType && incomingWebhooksType === 'modern') { - channelWebhook = getChannelForEventName(eventChannelSettings, eventName); - } else { - // default - channelName = getChannelNameForEvent(eventChannelSettings, eventName); - } + // building channel list + buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName); + const channelListArray = Array.from(channelListToSendThisEvent); // building templatelist - buildtemplateList(templateListForThisEvent, eventTemplateSettings, eventName); + buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName); const templateListArray = Array.from(templateListForThisEvent); logger.debug( @@ -223,6 +187,8 @@ const processTrack = (message, destination) => { templateListArray, templateListArray.length > 0 ? templateListArray[0] : undefined, ); + logger.debug('channelListToSendThisEvent: ', channelListArray); + // track event default handlebar expression const defaultTemplate = '{{name}} did {{event}}'; const template = templateListArray @@ -253,16 +219,9 @@ const processTrack = (message, destination) => { } catch (err) { throw new ConfigurationError(`Something is wrong with the event template: '${template}'`); } - if (incomingWebhooksType === 'modern' && channelWebhook) { - return buildResponse({ text: resultText }, message, destination, channelWebhook, false); - } - if (channelName) { - return buildResponse( - { channel: channelName, text: resultText }, - message, - destination, - channelWebhook, - ); + + if (channelListArray && channelListArray.length > 0) { + return buildResponse({ channel: channelListArray[0], text: resultText }, message, destination); } return buildResponse({ text: resultText }, message, destination); }; diff --git a/src/v0/destinations/slack/util.js b/src/v0/destinations/slack/util.js index 658ffe4d37..b327d1d867 100644 --- a/src/v0/destinations/slack/util.js +++ b/src/v0/destinations/slack/util.js @@ -72,10 +72,8 @@ const stringifyJSON = (json, whiteListedTraits) => { return output; }; -/* build default identify template - * if whitelisted traits are present build on it - * else build the entire traits object - */ +// build default identify template +// if whitelisted traits are present build on it else build the entire traits object const buildDefaultTraitTemplate = (traitsList, traits, template) => { let generatedStringFromTemplate = template; // build template with whitelisted traits diff --git a/src/v0/destinations/snapchat_custom_audience/networkHandler.js b/src/v0/destinations/snapchat_custom_audience/networkHandler.js index 196f9a87fb..0f75d36a56 100644 --- a/src/v0/destinations/snapchat_custom_audience/networkHandler.js +++ b/src/v0/destinations/snapchat_custom_audience/networkHandler.js @@ -1,4 +1,4 @@ -const { removeUndefinedValues, getAuthErrCategoryFromErrDetailsAndStCode } = require('../../util'); +const { removeUndefinedValues } = require('../../util'); const { prepareProxyRequest, getPayloadData, httpSend } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util/index'); const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); @@ -30,6 +30,22 @@ const prepareProxyReq = (request) => { }); }; +/** + * This function helps to determine type of error occurred. According to the response + * we set authErrorCategory to take decision if we need to refresh the access_token + * or need to disable the destination. + * @param {*} code + * @param {*} response + * @returns + */ +const getAuthErrCategory = (code, response) => { + let authErrCategory = ''; + if (code === 401) { + authErrCategory = !response.error?.details ? REFRESH_TOKEN : ''; + } + return authErrCategory; +}; + const scAudienceProxyRequest = async (request) => { const { endpoint, data, method, params, headers } = prepareProxyReq(request); @@ -49,7 +65,7 @@ const scAudienceProxyRequest = async (request) => { const scaAudienceRespHandler = (destResponse, stageMsg) => { const { status, response } = destResponse; - const authErrCategory = getAuthErrCategoryFromErrDetailsAndStCode(status, response); + const authErrCategory = getAuthErrCategory(status, response); if (authErrCategory === REFRESH_TOKEN) { throw new RetryableError( diff --git a/src/v0/destinations/snapchat_custom_audience/transform.js b/src/v0/destinations/snapchat_custom_audience/transform.js index 7938236594..1c16115494 100644 --- a/src/v0/destinations/snapchat_custom_audience/transform.js +++ b/src/v0/destinations/snapchat_custom_audience/transform.js @@ -4,13 +4,33 @@ const { removeUndefinedAndNullValues, simpleProcessRouterDest, isDefinedAndNotNullAndNotEmpty, - getAccessToken, } = require('../../util'); -const { ConfigurationError } = require('../../util/errorTypes'); +const { ConfigurationError, OAuthSecretError } = require('../../util/errorTypes'); const { BASE_URL, schemaType } = require('./config'); const { validatePayload, validateFields } = require('./utils'); const { JSON_MIME_TYPE } = require('../../util/constant'); +/** + * Get access token to be bound to the event req headers + * + * Note: + * This method needs to be implemented particular to the destination + * As the schema that we'd get in `metadata.secret` can be different + * for different destinations + * + * @param {Object} metadata + * @returns + */ +const getAccessToken = (metadata) => { + // OAuth for this destination + const { secret } = metadata; + // we would need to verify if secret is present and also if the access token field is present in secret + if (!secret || !secret.access_token) { + throw new OAuthSecretError('Empty/Invalid access token'); + } + return secret.access_token; +}; + const generateResponse = (groupedData, schema, segmentId, metadata, type) => { const payload = { users: [] }; const userPayload = { schema: [schema], data: groupedData }; @@ -23,7 +43,7 @@ const generateResponse = (groupedData, schema, segmentId, metadata, type) => { response.endpoint = `${BASE_URL}/segments/${segmentId}/users`; response.body.JSON = removeUndefinedAndNullValues(payload); - const accessToken = getAccessToken(metadata, 'access_token'); + const accessToken = getAccessToken(metadata); response.headers = { Authorization: `Bearer ${accessToken}`, 'Content-Type': JSON_MIME_TYPE, diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json index b15223b999..05709af27a 100644 --- a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json +++ b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json @@ -1,7 +1,7 @@ [ { "destKey": "event_id", - "sourceKeys": ["properties.eventId", "properties.event_id", "messageId"], + "sourceKeys": "properties.eventId", "required": false }, { diff --git a/src/v0/destinations/twitter_ads/transform.js b/src/v0/destinations/twitter_ads/transform.js index 363e61072e..78c3379c64 100644 --- a/src/v0/destinations/twitter_ads/transform.js +++ b/src/v0/destinations/twitter_ads/transform.js @@ -9,15 +9,15 @@ const { simpleProcessRouterDest, } = require('../../util'); const { EventType } = require('../../../constants'); -const { ConfigCategories, mappingConfig, BASE_URL } = require('./config'); - const { - InstrumentationError, - OAuthSecretError, - ConfigurationError, -} = require('../../util/errorTypes'); + ConfigCategories, + mappingConfig, + BASE_URL +} = require('./config'); + +const { InstrumentationError, OAuthSecretError, ConfigurationError } = require('../../util/errorTypes'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const { getAuthHeaderForRequest } = require('./util'); +const { getAuthHeaderForRequest } = require("./util"); const getOAuthFields = ({ secret }) => { if (!secret) { @@ -27,7 +27,7 @@ const getOAuthFields = ({ secret }) => { consumerKey: secret.consumerKey, consumerSecret: secret.consumerSecret, accessToken: secret.accessToken, - accessTokenSecret: secret.accessTokenSecret, + accessTokenSecret: secret.accessTokenSecret }; return oAuthObject; }; @@ -42,7 +42,7 @@ function buildResponse(message, requestJson, metadata, endpointUrl) { const request = { url: response.endpoint, method: response.method, - body: response.body.JSON, + body: response.body.JSON }; const oAuthObject = getOAuthFields(metadata); @@ -60,20 +60,17 @@ function prepareUrl(message, destination) { } function populateEventId(event, requestJson, destination) { + const eventNameToIdMappings = destination.Config.twitterAdsEventNames; - let eventId = ''; + let eventId = ""; if (eventNameToIdMappings) { - const eventObj = eventNameToIdMappings.find( - (obj) => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase(), - ); + const eventObj = eventNameToIdMappings.find(obj => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase()); eventId = eventObj?.twitterEventId; } - if (!eventId) { - throw new ConfigurationError( - `[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`, - ); + if(!eventId) { + throw new ConfigurationError(`[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`); } return eventId; @@ -82,16 +79,14 @@ function populateEventId(event, requestJson, destination) { function populateContents(requestJson) { const reqJson = { ...requestJson }; if (reqJson.contents) { - const transformedContents = requestJson.contents - .map((obj) => ({ - ...(obj.id && { content_id: obj.id }), - ...(obj.groupId && { content_group_id: obj.groupId }), - ...(obj.name && { content_name: obj.name }), - ...(obj.price && { content_price: parseFloat(obj.price) }), - ...(obj.type && { content_type: obj.type }), - ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) }), - })) - .filter((tfObj) => Object.keys(tfObj).length > 0); + const transformedContents = requestJson.contents.map(obj => ({ + ...(obj.id && { content_id: obj.id }), + ...(obj.groupId && { content_group_id: obj.groupId }), + ...(obj.name && { content_name: obj.name }), + ...(obj.price && { content_price: parseFloat(obj.price) }), + ...(obj.type && { content_type: obj.type }), + ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) }) + })).filter(tfObj => Object.keys(tfObj).length > 0); if (transformedContents.length > 0) { reqJson.contents = transformedContents; } @@ -101,14 +96,13 @@ function populateContents(requestJson) { // process track call function processTrack(message, metadata, destination) { + let requestJson = constructPayload(message, mappingConfig[ConfigCategories.TRACK.name]); - requestJson.event_id = - requestJson.event_id || populateEventId(message.event, requestJson, destination); + requestJson.event_id = requestJson.event_id || populateEventId(message.event, requestJson, destination); requestJson.conversion_time = isDefinedAndNotNull(requestJson.conversion_time) - ? requestJson.conversion_time - : message.timestamp; + ? requestJson.conversion_time : message.timestamp; const identifiers = []; @@ -116,19 +110,19 @@ function processTrack(message, metadata, destination) { let email = message.properties.email.trim(); if (email) { email = email.toLowerCase(); - identifiers.push({ hashed_email: sha256(email) }); + identifiers.push({hashed_email: sha256(email)}) } } if (message.properties.phone) { const phone = message.properties.phone.trim(); if (phone) { - identifiers.push({ hashed_phone_number: sha256(phone) }); + identifiers.push({hashed_phone_number: sha256(phone)}) } } if (message.properties.twclid) { - identifiers.push({ twclid: message.properties.twclid }); + identifiers.push({twclid: sha256(message.properties.twclid)}); } requestJson = populateContents(requestJson); @@ -137,26 +131,33 @@ function processTrack(message, metadata, destination) { const endpointUrl = prepareUrl(message, destination); - return buildResponse(message, requestJson, metadata, endpointUrl); + return buildResponse( + message, + requestJson, + metadata, + endpointUrl + ); } function validateRequest(message) { + const { properties } = message; if (!properties) { throw new InstrumentationError( - '[TWITTER ADS]: properties must be present in event. Aborting message', + '[TWITTER ADS]: properties must be present in event. Aborting message', ); } if (!properties.email && !properties.phone && !properties.twclid) { throw new InstrumentationError( - '[TWITTER ADS]: one of twclid, phone or email must be present in properties.', + '[TWITTER ADS]: one of twclid, phone or email must be present in properties.', ); } } function process(event) { + const { message, metadata, destination } = event; validateRequest(message); @@ -168,6 +169,7 @@ function process(event) { } throw new InstrumentationError(`Message type ${messageType} not supported`); + } const processRouterDest = async (inputs, reqMetadata) => { diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 8a20104dd0..b04d64deb6 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -28,10 +28,6 @@ const { } = require('./errorTypes'); const { client: errNotificationClient } = require('../../util/errorNotifier'); const { HTTP_STATUS_CODES } = require('./constant'); -const { - REFRESH_TOKEN, - AUTH_STATUS_INACTIVE, -} = require('../../adapters/networkhandler/authConstants'); // ======================================================================== // INLINERS // ======================================================================== @@ -1833,8 +1829,8 @@ const getAccessToken = (metadata, accessTokenKey) => { // OAuth for this destination const { secret } = metadata; // we would need to verify if secret is present and also if the access token field is present in secret - if (!secret?.[accessTokenKey]) { - throw new OAuthSecretError('OAuth - access token not found'); + if (!secret || !secret[accessTokenKey]) { + throw new OAuthSecretError('Empty/Invalid access token'); } return secret[accessTokenKey]; }; @@ -1916,51 +1912,6 @@ const batchMultiplexedEvents = (transformedEventsList, maxBatchSize) => { return batchedEvents; }; -/** - * This function helps to detarmine type of error occured. According to the response - * we set authErrorCategory to take decision if we need to refresh the access_token - * or need to de-activate authStatus for the destination. - * - * **Scenarios**: - * - statusCode=401, response.error.details !== "" -> REFRESH_TOKEN - * - statusCode=403, response.error.details !== "" -> AUTH_STATUS_INACTIVE - * - * @param {*} code - * @param {*} response - * @returns - */ -const getAuthErrCategoryFromErrDetailsAndStCode = (code, response) => { - if (code === 401 && (!get(response, 'error.details') || typeof response === 'string')) - return REFRESH_TOKEN; - if (code === 403 && (!get(response, 'error.details') || typeof response === 'string')) - return AUTH_STATUS_INACTIVE; - return ''; -}; - -/** - * This function helps to determine the type of error occurred. We set the authErrorCategory - * as per the destination response that is received and take the decision whether - * to refresh the access_token or de-activate authStatus. - * - * **Scenarios**: - * - statusCode=401 -> REFRESH_TOKEN - * - statusCode=403 -> AUTH_STATUS_INACTIVE - * - * @param {*} status - * @returns - */ -const getAuthErrCategoryFromStCode = (status) => { - if (status === 401) { - // UNAUTHORIZED - return REFRESH_TOKEN; - } - if (status === 403) { - // ACCESS_DENIED - return AUTH_STATUS_INACTIVE; - } - return ''; -}; - // ======================================================================== // EXPORTS // ======================================================================== @@ -2061,6 +2012,4 @@ module.exports = { checkAndCorrectUserId, getAccessToken, formatValues, - getAuthErrCategoryFromErrDetailsAndStCode, - getAuthErrCategoryFromStCode, }; diff --git a/src/warehouse/index.js b/src/warehouse/index.js index c12239c440..dd5116f00e 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -7,8 +7,7 @@ const { isObject, isBlank, isValidJsonPathKey, - isValidLegacyJsonPathKey, - keysFromJsonPaths, + getKeysFromJsonPaths, validTimestamp, getVersionedUtils, isRudderSourcesEvent, @@ -196,6 +195,7 @@ function setDataFromColumnMappingAndComputeColumnTypes( columnTypes = {context_library_name: 'string', context_library_version: 'string'} */ + function setDataFromInputAndComputeColumnTypes( utils, eventType, @@ -203,26 +203,12 @@ function setDataFromInputAndComputeColumnTypes( input, columnTypes, options, - completePrefix = '', - completeLevel = 0, prefix = '', level = 0, ) { if (!input || !isObject(input)) return; Object.keys(input).forEach((key) => { - const isValidLegacyJSONPath = isValidLegacyJsonPathKey( - eventType, - `${prefix + key}`, - level, - options.jsonLegacyPathKeys, - ); - const isValidJSONPath = isValidJsonPathKey( - `${completePrefix + key}`, - completeLevel, - options.jsonPathKeys, - ); - - if (isValidJSONPath || isValidLegacyJSONPath) { + if (isValidJsonPathKey(eventType, `${prefix + key}`, input[key], level, options.jsonKeys)) { if (isBlank(input[key])) { return; } @@ -246,8 +232,6 @@ function setDataFromInputAndComputeColumnTypes( input[key], columnTypes, options, - `${completePrefix + key}_`, - completeLevel + 1, `${prefix + key}_`, level + 1, ); @@ -337,10 +321,7 @@ function addJsonKeysToOptions(options) { if (options.destJsonPaths) { jsonPaths.push(...options.destJsonPaths.split(',')); } - - const keys = keysFromJsonPaths(jsonPaths); - options.jsonPathKeys = keys.jsonPathKeys; - options.jsonLegacyPathKeys = keys.jsonLegacyPathKeys; + options.jsonKeys = getKeysFromJsonPaths(jsonPaths); } /* @@ -602,8 +583,6 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); @@ -626,8 +605,6 @@ function processWarehouseMessage(message, options) { message.properties, eventTableColumnTypes, options, - `${eventType + '_properties_'}`, - 2, ); setDataFromColumnMappingAndComputeColumnTypes( utils, @@ -681,8 +658,6 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -757,8 +732,6 @@ function processWarehouseMessage(message, options) { message.properties, eventTableColumnTypes, options, - `${eventType + '_properties_'}`, - 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -767,8 +740,6 @@ function processWarehouseMessage(message, options) { message.userProperties, eventTableColumnTypes, options, - `${eventType + '_userProperties_'}`, - 2, ); setDataFromColumnMappingAndComputeColumnTypes( utils, @@ -823,8 +794,6 @@ function processWarehouseMessage(message, options) { message.userProperties, commonColumnTypes, options, - `${eventType + '_userProperties_'}`, - 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -833,8 +802,6 @@ function processWarehouseMessage(message, options) { message.context ? message.context.traits : {}, commonColumnTypes, options, - `${eventType + '_context_traits_'}`, - 3, ); setDataFromInputAndComputeColumnTypes( utils, @@ -843,8 +810,6 @@ function processWarehouseMessage(message, options) { message.traits, commonColumnTypes, options, - `${eventType + '_traits_'}`, - 2, '', ); @@ -856,8 +821,6 @@ function processWarehouseMessage(message, options) { message.context, commonColumnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); @@ -962,8 +925,6 @@ function processWarehouseMessage(message, options) { message.properties, columnTypes, options, - `${eventType + '_properties_'}`, - 2, ); // set rudder properties after user set properties to prevent overwriting setDataFromInputAndComputeColumnTypes( @@ -973,8 +934,6 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -1033,8 +992,6 @@ function processWarehouseMessage(message, options) { message.traits, columnTypes, options, - `${eventType + '_traits_'}`, - 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -1043,8 +1000,6 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( @@ -1091,8 +1046,6 @@ function processWarehouseMessage(message, options) { message.traits, columnTypes, options, - `${eventType + '_traits_'}`, - 2, ); setDataFromInputAndComputeColumnTypes( utils, @@ -1101,8 +1054,6 @@ function processWarehouseMessage(message, options) { message.context, columnTypes, options, - `${eventType + '_context_'}`, - 2, 'context_', ); setDataFromColumnMappingAndComputeColumnTypes( diff --git a/src/warehouse/util.js b/src/warehouse/util.js index 91b49039f1..b965ecb029 100644 --- a/src/warehouse/util.js +++ b/src/warehouse/util.js @@ -15,77 +15,26 @@ const isObject = (value) => { return value != null && (type === 'object' || type === 'function') && !Array.isArray(value); }; -const isValidJsonPathKey = (key, level, jsonKeys = {}) => { - return jsonKeys[key] === level; -}; -const isValidLegacyJsonPathKey = (eventType, key, level, jsonKeys = {}) => { +const isValidJsonPathKey = (eventType, key, val, level, jsonKeys = {}) => { return eventType === 'track' && jsonKeys[key] === level; }; const isBlank = (value) => { return _.isEmpty(_.toString(value)); }; - /* -This function takes in an array of json paths and returns an object with keys as the json path and value as the position of the key in the json path -Example: -Input: -[ - "a", - "b.c" -] -Output: -{ - "a": 0, - "b_c": 1 -} - -Input: -[ - "track.context.a", - "track.properties.b", - "pages.properties.c.d", - "groups.traits.e.f" -] -Output: -{ - "track_context_a": 2, - "track_properties_b": 2, - "pages_properties_c_d": 3, - "groups_traits_e_f": 3 -} + * input => ["a", "b.c"] + * output => { "a": 0, "b_c": 1} */ -const keysFromJsonPaths = (jsonPaths) => { - const jsonPathKeys = {}; - const jsonLegacyPathKeys = {}; - - const supportedEventPrefixes = [ - 'track.', - 'identify.', - 'page.', - 'screen.', - 'alias.', - 'group.', - 'extract.', - ]; - +const getKeysFromJsonPaths = (jsonPaths) => { + const jsonKeys = {}; jsonPaths.forEach((jsonPath) => { - const trimmedJSONPath = jsonPath.trim(); - if (!trimmedJSONPath) { - return; - } - - const paths = trimmedJSONPath.split('.'); - const key = paths.join('_'); - const pos = paths.length - 1; - - if (supportedEventPrefixes.some((prefix) => trimmedJSONPath.startsWith(prefix))) { - jsonPathKeys[key] = pos; - return; + if (jsonPath.trim()) { + const paths = jsonPath.trim().split('.'); + jsonKeys[paths.join('_')] = paths.length - 1; } - jsonLegacyPathKeys[key] = pos; }); - return { jsonPathKeys, jsonLegacyPathKeys }; + return jsonKeys; }; // https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ @@ -149,8 +98,7 @@ module.exports = { isObject, isBlank, isValidJsonPathKey, - isValidLegacyJsonPathKey, - keysFromJsonPaths, + getKeysFromJsonPaths, timestampRegex, validTimestamp, getVersionedUtils, diff --git a/test/__mocks__/data/google_adwords_offline_conversion/response.json b/test/__mocks__/data/google_adwords_offline_conversion/response.json index 285ef56509..d9e763c3ac 100644 --- a/test/__mocks__/data/google_adwords_offline_conversion/response.json +++ b/test/__mocks__/data/google_adwords_offline_conversion/response.json @@ -1,17 +1,17 @@ { - "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs:create": { "data": { "resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE" }, "status": 200 }, - "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs:create": { "data": { "resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID" }, "status": 200 }, - "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs:create": { "status": 401, "data": { "error": { @@ -21,11 +21,11 @@ } } }, - "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": { + "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": { "status": 200, "data": {} }, - "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": { + "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": { "status": 400, "data": { "error": { @@ -34,7 +34,7 @@ "status": "INVALID_ARGUMENT", "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", "errors": [ { "errorCode": { @@ -67,13 +67,13 @@ } } }, - "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": { + "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": { "status": 200, "data": { "name": "customers/111-222-3333/operations/abcd=" } }, - "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": { + "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": { "status": 400, "data": { "error": { @@ -82,7 +82,7 @@ "status": "INVALID_ARGUMENT", "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", "errors": [ { "errorCode": { diff --git a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json index 246ba7f9fb..93689bb0cb 100644 --- a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json +++ b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json @@ -1,23 +1,23 @@ { - "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs:create": { "status": 200, "data": { "resourceName": "customers/9249589672/offlineUserDataJobs/18025019461" } }, - "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": { + "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": { "status": 200 }, - "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:run": { + "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:run": { "status": 200 }, - "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs:create": { + "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs:create": { "status": 200, "data": { "resourceName": "customers/9249589672/offlineUserDataJobs/18025019462" } }, - "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": { + "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": { "response": { "data": { "error": { @@ -60,7 +60,7 @@ "status": 400 } }, - "https://googleads.googleapis.com/v14/customers/1234567890/googleAds:searchStream": { + "https://googleads.googleapis.com/v13/customers/1234567890/googleAds:searchStream": { "response": { "data": [ { @@ -74,11 +74,11 @@ "status": 401 } }, - "https://googleads.googleapis.com/v14/customers/1234567899/googleAds:searchStream": { + "https://googleads.googleapis.com/v13/customers/1234567899/googleAds:searchStream": { "response": "", "code": "ECONNREFUSED" }, - "https://googleads.googleapis.com/v14/customers/1234567891/googleAds:searchStream": { + "https://googleads.googleapis.com/v13/customers/1234567891/googleAds:searchStream": { "data": [ { "results": [ @@ -95,7 +95,7 @@ ], "status": 200 }, - "https://googleads.googleapis.com/v14/customers/1234567891:uploadConversionAdjustments": { + "https://googleads.googleapis.com/v13/customers/1234567891:uploadConversionAdjustments": { "data": [ { "adjustmentType": "ENHANCEMENT", diff --git a/test/__mocks__/data/marketo_static_list/proxy_response.json b/test/__mocks__/data/marketo_static_list/proxy_response.json index 290a4f5fbf..5c00ced941 100644 --- a/test/__mocks__/data/marketo_static_list/proxy_response.json +++ b/test/__mocks__/data/marketo_static_list/proxy_response.json @@ -1,31 +1,4 @@ { - "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112": { - "data": { - "requestId": "b6d1#18a8d2c10e7", - "result": [ - { - "id": 110, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - { - "id": 111, - "status": "removed" - }, - { - "id": 112, - "status": "removed" - } - ], - "success": true - }, - "status": 200 - }, "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3": { "data": { "requestId": "68d8#1846058ee27", @@ -87,11 +60,12 @@ "status": "skipped", "reasons": [ { - "code": "1015", - "message": "Lead not in list" + "code": "1004", + "message": "Lead not found" } ] }, + "success": true }, "status": 200 diff --git a/test/__tests__/data/customerio_input.json b/test/__tests__/data/customerio_input.json index e2d987fc5a..337a1e51e6 100644 --- a/test/__tests__/data/customerio_input.json +++ b/test/__tests__/data/customerio_input.json @@ -15,7 +15,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -87,7 +87,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628" } } @@ -158,7 +158,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -227,7 +227,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -298,7 +298,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -353,7 +353,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -406,7 +406,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -459,7 +459,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -511,7 +511,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -580,7 +580,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -649,7 +649,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -709,7 +709,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -768,7 +768,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -826,7 +826,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -885,7 +885,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -943,7 +943,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1003,7 +1003,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1062,7 +1062,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1121,7 +1121,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1181,7 +1181,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1241,7 +1241,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1312,7 +1312,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1367,7 +1367,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1420,7 +1420,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1473,7 +1473,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1525,7 +1525,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1594,7 +1594,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1663,7 +1663,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1723,7 +1723,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1781,7 +1781,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1840,7 +1840,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1898,7 +1898,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -1958,7 +1958,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2017,7 +2017,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2076,7 +2076,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2136,7 +2136,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2196,7 +2196,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2247,7 +2247,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2299,7 +2299,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2350,7 +2350,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2402,7 +2402,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2467,7 +2467,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "abc", "apiKey": "xyz" } @@ -2533,7 +2533,7 @@ }, "destination": { "Config": { - "datacenter": "EU", + "datacenterEU": true, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -2608,7 +2608,7 @@ }, "Config": { "apiKey": "a292d85ac36de15fc219", - "datacenter": "US", + "datacenterEU": false, "siteID": "eead090ab9e2e35004dc" }, "Enabled": true, @@ -2688,7 +2688,7 @@ }, "Config": { "apiKey": "a292d85ac36de15fc219", - "datacenter": "US", + "datacenterEU": false, "siteID": "eead090ab9e2e35004dc" }, "Enabled": true, @@ -2818,7 +2818,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -2945,7 +2945,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3071,7 +3071,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3197,7 +3197,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3320,7 +3320,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3447,7 +3447,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3574,7 +3574,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3701,7 +3701,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3827,7 +3827,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -3950,7 +3950,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -4077,7 +4077,7 @@ }, "Config": { "apiKey": "DESAU SAI", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "DESU SAI" }, @@ -4168,7 +4168,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4259,7 +4259,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4353,7 +4353,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4447,7 +4447,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4542,7 +4542,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4637,7 +4637,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "US", + "datacenterEU": false, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4732,7 +4732,7 @@ }, "Config": { "apiKey": "ef32c3f60fb98f39ef35", - "datacenter": "EU", + "datacenterEU": true, "deviceTokenEventName": "device_token_registered", "siteID": "c0efdbd20b9fbe24a7e2" }, @@ -4789,7 +4789,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -4842,7 +4842,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } @@ -4889,7 +4889,7 @@ }, "destination": { "Config": { - "datacenter": "US", + "datacenterEU": false, "siteID": "46be54768e7d49ab2628", "apiKey": "dummyApiKey" } 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/google_adwords_enhanced_conversions_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_output.json index 292a849673..f90bcd5901 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_output.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -91,7 +91,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -177,7 +177,7 @@ "secret": null }, "statusCode": 400, - "error": "OAuth - access token not found", + "error": "Empty/Invalid access token", "statTags": { "destination": "google_adwords_enhanced_conversions", "stage": "transform", @@ -204,7 +204,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -260,7 +260,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json b/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json index 430cfbd05f..d9d0575355 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_proxy_input.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -56,7 +56,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567899:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567899:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -109,7 +109,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -158,4 +158,4 @@ }, "files": {} } -] +] \ No newline at end of file diff --git a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json index c283549e50..6ddec019e3 100644 --- a/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json +++ b/test/__tests__/data/google_adwords_enhanced_conversions_router_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadConversionAdjustments", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadConversionAdjustments", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -137,7 +137,7 @@ }, "batched": false, "statusCode": 500, - "error": "OAuth - access token not found", + "error": "Empty/Invalid access token", "statTags": { "errorCategory": "platform", "errorType": "oAuthSecret" diff --git a/test/__tests__/data/google_adwords_offline_conversions.json b/test/__tests__/data/google_adwords_offline_conversions.json index 3c7b54ac4c..53c0f9bf3e 100644 --- a/test/__tests__/data/google_adwords_offline_conversions.json +++ b/test/__tests__/data/google_adwords_offline_conversions.json @@ -159,7 +159,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -418,7 +418,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -677,7 +677,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -936,7 +936,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -1796,7 +1796,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -1896,7 +1896,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2090,7 +2090,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2257,7 +2257,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2461,7 +2461,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -2651,7 +2651,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3077,7 +3077,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3383,7 +3383,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3544,7 +3544,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3827,7 +3827,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -3993,7 +3993,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4163,7 +4163,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4294,7 +4294,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4421,7 +4421,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4546,7 +4546,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -4600,4 +4600,4 @@ } ] } -] +] \ No newline at end of file diff --git a/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json b/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json index 5a9f4e4126..a812fdbcc4 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json +++ b/test/__tests__/data/google_adwords_offline_conversions_proxy_input.json @@ -5,7 +5,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -75,7 +75,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -145,7 +145,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -215,7 +215,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567890:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567890:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -320,7 +320,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -425,7 +425,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json b/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json index e6d298956f..2bdcaeea49 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json +++ b/test/__tests__/data/google_adwords_offline_conversions_proxy_output.json @@ -8,7 +8,7 @@ "code": 400, "details": [ { - "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure", + "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure", "errors": [ { "errorCode": { diff --git a/test/__tests__/data/google_adwords_offline_conversions_router_output.json b/test/__tests__/data/google_adwords_offline_conversions_router_output.json index 16b07233e3..87c4b671f7 100644 --- a/test/__tests__/data/google_adwords_offline_conversions_router_output.json +++ b/test/__tests__/data/google_adwords_offline_conversions_router_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -130,7 +130,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -259,7 +259,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/9625812972:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/9625812972:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -367,7 +367,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833:uploadCallConversions", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833:uploadCallConversions", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_remarketing_lists_output.json b/test/__tests__/data/google_adwords_remarketing_lists_output.json index cd92d314b6..8c938bc3d3 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_output.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_output.json @@ -4,7 +4,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -52,7 +52,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -90,7 +90,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -197,7 +197,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1219,7 +1219,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1278,7 +1278,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -1339,7 +1339,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -2359,7 +2359,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -3381,7 +3381,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -3458,7 +3458,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -4478,7 +4478,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5500,7 +5500,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5559,7 +5559,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5620,7 +5620,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5678,7 +5678,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5735,7 +5735,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5779,7 +5779,7 @@ "secret": null }, "statusCode": 500, - "error": "OAuth - access token not found", + "error": "Empty/Invalid access token", "statTags": { "destination": "google_adwords_remarketing_lists", "stage": "transform", @@ -5791,7 +5791,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5835,7 +5835,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -5877,7 +5877,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", diff --git a/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json b/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json index ff74720bc3..d9745e9f65 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_proxy_input.json @@ -3,7 +3,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -53,7 +53,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -89,7 +89,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer dummy-access", "Content-Type": "application/json", @@ -135,4 +135,4 @@ }, "files": {} } -] +] \ No newline at end of file diff --git a/test/__tests__/data/google_adwords_remarketing_lists_router_output.json b/test/__tests__/data/google_adwords_remarketing_lists_router_output.json index ff6755237f..0b5d5265f9 100644 --- a/test/__tests__/data/google_adwords_remarketing_lists_router_output.json +++ b/test/__tests__/data/google_adwords_remarketing_lists_router_output.json @@ -5,7 +5,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -76,7 +76,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -136,7 +136,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -207,7 +207,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", @@ -250,7 +250,7 @@ "version": "1", "type": "REST", "method": "POST", - "endpoint": "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs", + "endpoint": "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs", "headers": { "Authorization": "Bearer abcd1234", "Content-Type": "application/json", diff --git a/test/__tests__/data/hs_output.json b/test/__tests__/data/hs_output.json index 6167ea69f3..f26bfe8432 100644 --- a/test/__tests__/data/hs_output.json +++ b/test/__tests__/data/hs_output.json @@ -716,7 +716,7 @@ }, { "statusCode": 400, - "error": "Event name 'temp event' mappings are not configured in the destination" + "error": "'temp event' event name not found" }, { "statusCode": 400, diff --git a/test/__tests__/data/iterable.json b/test/__tests__/data/iterable.json index 08e83a47a5..2612978f88 100644 --- a/test/__tests__/data/iterable.json +++ b/test/__tests__/data/iterable.json @@ -3078,7 +3078,6 @@ }, "messageId": "node-570110489d3e99b234b18af9a9eca9d4-6009779e-82d7-469d-aaeb-5ccf162b0453", "properties": { - "id": "event1234", "subject": "resume validate", "sendtime": "2020-01-01", "sendlocation": "akashdeep@gmail.com" @@ -3103,11 +3102,9 @@ "JSON_ARRAY": {}, "FORM": {}, "JSON": { - "id": "event1234", "userId": "abcdeeeeeeeexxxx102", "createdAt": 1598631966468, "dataFields": { - "id": "event1234", "subject": "resume validate", "sendtime": "2020-01-01", "sendlocation": "akashdeep@gmail.com" diff --git a/test/__tests__/data/klaviyo.json b/test/__tests__/data/klaviyo.json index 1fc46a6e4c..e3ce30c792 100644 --- a/test/__tests__/data/klaviyo.json +++ b/test/__tests__/data/klaviyo.json @@ -705,7 +705,7 @@ } }, { - "description": "Screen event call", + "description": "Track event call", "input": { "destination": { "Config": { @@ -800,13 +800,13 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "VicePresidents": ["Aaron Burr", "George Clinton"] + "VicePresidents": ["Aaron Burr", "George Clinton"], + "age": "22" }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22" + "$id": "sajal12" } } } @@ -863,11 +863,7 @@ "age": "22", "email": "test@rudderstack.com", "phone": "9112340375", - "anonymousId": "9c6bd77ea9da3e68", - "plan_details": { - "plan_type": "gold", - "duration": "3 months" - } + "anonymousId": "9c6bd77ea9da3e68" }, "library": { "name": "com.rudderstack.android.sdk.core", @@ -921,15 +917,13 @@ "properties": { "vicePresdentInfo.PreviouslVicePresident": true, "vicePresdentInfo.VicePresidents": ["AaronBurr", "GeorgeClinton"], - "vicePresdentInfo.YearElected": 1801 + "vicePresdentInfo.YearElected": 1801, + "age": "22" }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "plan_details.plan_type": "gold", - "plan_details.duration": "3 months" + "$id": "sajal12" } } } @@ -1040,15 +1034,15 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "VicePresidents": ["Aaron Burr", "George Clinton"] + "age": "22", + "VicePresidents": ["Aaron Burr", "George Clinton"], + "description": "Sample description", + "name": "Test" }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" + "$id": "sajal12" }, "value": 3000 } @@ -1158,12 +1152,12 @@ "properties": { "PreviouslyVicePresident": true, "YearElected": 1801, - "VicePresidents": ["Aaron Burr", "George Clinton"] + "VicePresidents": ["Aaron Burr", "George Clinton"], + "age": "22" }, "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "age": "22", "_id": "sajal12" } } @@ -1489,10 +1483,7 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" + "$id": "sajal12" }, "properties": { "ProductName": "test product", @@ -1502,7 +1493,10 @@ "URL": "http://www.example.com/path/to/product", "Brand": "Not for Kids", "Price": 9.9, - "Categories": ["Fiction", "Children"] + "Categories": ["Fiction", "Children"], + "age": "22", + "name": "Test", + "description": "Sample description" } } } @@ -1639,6 +1633,9 @@ "properties": { "$event_id": "1234", "$value": 20, + "age": "22", + "name": "Test", + "description": "Sample description", "items[0].ProductID": "123", "items[0].SKU": "G-32", "items[0].ProductName": "Monopoly", @@ -1655,10 +1652,7 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" + "$id": "sajal12" } } } @@ -1786,16 +1780,16 @@ "profile": { "$email": "test@rudderstack.com", "$phone_number": "9112340375", - "$id": "sajal12", - "age": "22", - "name": "Test", - "description": "Sample description" + "$id": "sajal12" }, "properties": { "$value": 12.12, "AddedItemCategories": ["Fiction3", "Children3"], "ItemNames": ["book1", "book2"], "CheckoutURL": "http://www.heythere.com", + "age": "22", + "name": "Test", + "description": "Sample description", "items": [ { "ProductID": "b1pid", 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/marketo_static_list_proxy_input.json b/test/__tests__/data/marketo_static_list_proxy_input.json index 6f84e7416d..85142d68d7 100644 --- a/test/__tests__/data/marketo_static_list_proxy_input.json +++ b/test/__tests__/data/marketo_static_list_proxy_input.json @@ -1,24 +1,4 @@ [ - { - "type": "REST", - "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112", - "method": "POST", - "userId": "", - "headers": { - "Authorization": "Bearer Incorrect_token", - "Content-Type": "application/json" - }, - "body": { - "FORM": {}, - "JSON": {}, - "JSON_ARRAY": {}, - "XML": {} - }, - "files": {}, - "params": { - "destination": "marketo_static_list" - } - }, { "type": "REST", "endpoint": "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3", diff --git a/test/__tests__/data/marketo_static_list_proxy_output.json b/test/__tests__/data/marketo_static_list_proxy_output.json index ec52d0c37c..2dfbee0e8e 100644 --- a/test/__tests__/data/marketo_static_list_proxy_output.json +++ b/test/__tests__/data/marketo_static_list_proxy_output.json @@ -1,37 +1,4 @@ [ - { - "output": { - "message": "Request Processed Successfully", - "destinationResponse": { - "response": { - "requestId": "b6d1#18a8d2c10e7", - "result": [ - { - "id": 110, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - { - "id": 111, - "status": "removed" - }, - { - "id": 112, - "status": "removed" - } - ], - "success": true - }, - "status": 200 - }, - "status": 200 - } - }, { "output": { "status": 500, @@ -105,25 +72,21 @@ }, { "output": { - "status": 200, - "message": "Request Processed Successfully", - "destinationResponse": { - "response": { - "requestId": "12d3c#1846057dce2", - "result": { - "id": 5, - "status": "skipped", - "reasons": [ - { - "code": "1015", - "message": "Lead not in list" - } - ] - }, - "success": true - }, - "status": 200 - } + "destinationResponse": "", + "message": "Request failed during: during Marketo Static List Response Handling, error: [{\"code\":\"1004\",\"message\":\"Lead not found\"}]", + "statTags": { + "destType": "MARKETO_STATIC_LIST", + "errorCategory": "dataValidation", + "destinationId": "Non-determininable", + "workspaceId": "Non-determininable", + "errorType": "instrumentation", + "feature": "dataDelivery", + "implementation": "native", + "destinationId": "Non-determininable", + "workspaceId": "Non-determininable", + "module": "destination" + }, + "status": 400 } } -] +] \ No newline at end of file diff --git a/test/__tests__/data/mp_input.json b/test/__tests__/data/mp_input.json index 6d456858c9..394fc49b61 100644 --- a/test/__tests__/data/mp_input.json +++ b/test/__tests__/data/mp_input.json @@ -432,18 +432,7 @@ "apiKey": "dummyApiKey", "token": "dummyApiKey", "prefixProperties": true, - "useNativeSDK": false, - "propIncrements": [ - { - "property": "counter" - }, - { - "property": "item_purchased" - }, - { - "property": "number_of_logins" - } - ] + "useNativeSDK": false }, "DestinationDefinition": { "DisplayName": "Kiss Metrics", @@ -504,10 +493,7 @@ "originalTimestamp": "2020-01-24T06:29:02.364Z", "properties": { "currency": "USD", - "revenue": 45.89, - "counter": 1, - "item_purchased": "2", - "number_of_logins": "" + "revenue": 45.89 }, "receivedAt": "2020-01-24T11:59:02.403+05:30", "request_ip": "[::1]:53710", @@ -596,12 +582,7 @@ "apiKey": "dummyApiKey", "token": "dummyApiKey", "prefixProperties": true, - "useNativeSDK": false, - "propIncrements": [ - { - "property": "" - } - ] + "useNativeSDK": false }, "DestinationDefinition": { "DisplayName": "Kiss Metrics", diff --git a/test/__tests__/data/mp_output.json b/test/__tests__/data/mp_output.json index 61100a1b84..fe54474dd8 100644 --- a/test/__tests__/data/mp_output.json +++ b/test/__tests__/data/mp_output.json @@ -128,24 +128,6 @@ "files": {}, "userId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca" }, - { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://api.mixpanel.com/engage/", - "headers": {}, - "params": {}, - "body": { - "JSON": {}, - "JSON_ARRAY": { - "batch": "[{\"$add\":{\"counter\":1,\"item_purchased\":\"2\"},\"$token\":\"dummyApiKey\",\"$distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\"}]" - }, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca" - }, { "version": "1", "type": "REST", @@ -156,7 +138,7 @@ "body": { "JSON": {}, "JSON_ARRAY": { - "batch": "[{\"event\":\"test revenue MIXPANEL\",\"properties\":{\"currency\":\"USD\",\"revenue\":45.89,\"counter\":1,\"item_purchased\":\"2\",\"number_of_logins\":\"\",\"city\":\"Disney\",\"country\":\"USA\",\"email\":\"mickey@disney.com\",\"firstName\":\"Mickey\",\"ip\":\"0.0.0.0\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"a6a0ad5a-bd26-4f19-8f75-38484e580fc7\",\"token\":\"dummyApiKey\",\"distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"time\":1579847342,\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}}]" + "batch": "[{\"event\":\"test revenue MIXPANEL\",\"properties\":{\"currency\":\"USD\",\"revenue\":45.89,\"city\":\"Disney\",\"country\":\"USA\",\"email\":\"mickey@disney.com\",\"firstName\":\"Mickey\",\"ip\":\"0.0.0.0\",\"$current_url\":\"https://docs.rudderstack.com/destinations/mixpanel\",\"$screen_dpi\":2,\"mp_lib\":\"RudderLabs JavaScript SDK\",\"$app_build_number\":\"1.0.0\",\"$app_version_string\":\"1.0.5\",\"$insert_id\":\"a6a0ad5a-bd26-4f19-8f75-38484e580fc7\",\"token\":\"dummyApiKey\",\"distinct_id\":\"e6ab2c5e-2cda-44a9-a962-e2f67df78bca\",\"time\":1579847342,\"$browser\":\"Chrome\",\"$browser_version\":\"79.0.3945.117\"}}]" }, "XML": {}, "FORM": {} diff --git a/test/__tests__/data/pardot_router_output.json b/test/__tests__/data/pardot_router_output.json index 889cc8fd96..913e35ce94 100644 --- a/test/__tests__/data/pardot_router_output.json +++ b/test/__tests__/data/pardot_router_output.json @@ -376,7 +376,7 @@ ], "batched": false, "statusCode": 500, - "error": "OAuth - access token not found", + "error": "Empty/Invalid access token", "statTags": { "errorCategory": "platform", "errorType": "oAuthSecret" diff --git a/test/__tests__/data/redis_output.json b/test/__tests__/data/redis_output.json index 69d2aa20c2..57d8387041 100644 --- a/test/__tests__/data/redis_output.json +++ b/test/__tests__/data/redis_output.json @@ -81,7 +81,7 @@ }, { "message": { - "hash": "some-workspace-id:1WhcOCGgj9asZu850HvugU2C3Aq:some-entity:some-id-type:some-user-id", + "hash": "some-workspace-id:some-entity:some-id-type:some-user-id", "key": "some-model", "value": "{\"MODEL_ID\":\"1691755780\",\"VALID_AT\":\"2023-08-11T11:32:44.963062Z\",\"USER_MAIN_ID\":\"rid5530313526204a95efe71d98cd17d5a1\",\"CHURN_SCORE_7_DAYS\":0.027986,\"PERCENTILE_CHURN_SCORE_7_DAYS\":0}" }, diff --git a/test/__tests__/data/slack_input.json b/test/__tests__/data/slack_input.json index cfc2db95fa..4e6195a37d 100644 --- a/test/__tests__/data/slack_input.json +++ b/test/__tests__/data/slack_input.json @@ -7,130 +7,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", + "eventChannel": "#slack_integration", "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" - } - }, - { - "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 - } + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -138,27 +25,11 @@ "eventRegex": true, "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": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "black_event" - } - ] + "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] }, "Enabled": true, "Transformations": [], @@ -179,10 +50,7 @@ "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/", @@ -190,9 +58,7 @@ "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", @@ -201,9 +67,7 @@ }, "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": { @@ -237,18 +101,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true - } + }, + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -256,22 +119,11 @@ "eventRegex": true, "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": [], @@ -292,400 +144,15 @@ "version": "1.1.1-rc.1" }, "locale": "en-US", - "os": { - "name": "", - "version": "" - }, + "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" - } - }, - { - "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": "" - } - ], - "blacklistedEvents": [ - { - "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" - } - }, - { - "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": "" - } - ], - "blacklistedEvents": [ - { - "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" - } - }, - { - "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": "" - } - ], - "blacklistedEvents": [ - { - "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 + "search": "", + "title": "", + "url": "" }, + "screen": { "density": 1.7999999523162842 }, "traits": { "country": "India", "email": "name@domain.com", @@ -694,32 +161,28 @@ }, "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 + "traits": { + "country": "USA", + "email": "test@domain.com", + "hiji": "hulala-1", + "name": "my-name-1" }, - "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", + "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": "00000000000000000000000000", + "anonymousId": "12345", "destinationId": "1ZQVSU9SXNg6KYgZALaqjAO3PIL", "destinationType": "SLACK", - "jobId": 129, - "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", + "jobId": 123, + "messageId": "4aaecff2-a513-4bbf-9824-c471f4ac9777", "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" } }, @@ -731,24 +194,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { - "incomingWebhooksType": "legacy", "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/demo", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventName": "is", - "eventRegex": true - } + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -756,27 +212,11 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties.key1}} {{properties.key2}} and traits {{traitsList.hiji}}" }, - { - "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": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "black_event" - } - ] + "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] }, "Enabled": true, "Transformations": [], @@ -798,10 +238,7 @@ "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/", @@ -809,9 +246,7 @@ "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", @@ -821,9 +256,7 @@ "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 - }, + "integrations": { "All": true }, "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "originalTimestamp": "2020-03-23T03:46:30.921Z", "properties": { @@ -857,25 +290,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { - "incomingWebhooksType": "legacy", "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true }, - { - "eventChannelWebhook": "https://hooks.slack.com/services/id1/id2/example+1", - "eventChannel": "example-of-legacy", - "eventName": "is", - "eventRegex": true - } + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -883,27 +308,11 @@ "eventRegex": true, "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": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "black_event" - } - ] + "whitelistedTraitsSettings": [{ "trait": "hiji" }, { "trait": "" }] }, "Enabled": true, "Transformations": [], @@ -925,10 +334,7 @@ "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/", @@ -936,9 +342,7 @@ "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", @@ -948,9 +352,7 @@ "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 - }, + "integrations": { "All": true }, "messageId": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", "originalTimestamp": "2020-03-23T03:46:30.922Z", "properties": { @@ -992,9 +394,19 @@ "Config": { "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true + }, + { + "eventChannel": "", + "eventName": "", + "eventRegex": false + }, + { + "eventChannel": "", + "eventName": "", + "eventRegex": false } ], "eventTemplateSettings": [ @@ -1098,18 +510,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true - } + }, + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -1117,22 +528,11 @@ "eventRegex": true, "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": [], @@ -1154,10 +554,7 @@ "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/", @@ -1165,9 +562,7 @@ "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", @@ -1176,9 +571,7 @@ }, "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": "8b8d5937-09bc-49dc-a35e-8cd6370575f8", "originalTimestamp": "2020-03-23T03:46:30.922Z", "properties": { @@ -1212,18 +605,17 @@ "ID": "1ZQUiJVMlmF7lfsdfXg7KXQnlLV", "Name": "SLACK", "DisplayName": "Slack", - "Config": { - "excludeKeys": [], - "includeKeys": [] - } + "Config": { "excludeKeys": [], "includeKeys": [] } }, "Config": { "eventChannelSettings": [ { - "eventChannelWebhook": "https://hooks.slack.com/services/example/test/demo", + "eventChannel": "#slack_integration", "eventName": "is", "eventRegex": true - } + }, + { "eventChannel": "", "eventName": "", "eventRegex": false }, + { "eventChannel": "", "eventName": "", "eventRegex": false } ], "eventTemplateSettings": [ { @@ -1231,22 +623,11 @@ "eventRegex": true, "eventTemplate": "{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}" }, - { - "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": [], @@ -1268,10 +649,7 @@ "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/", @@ -1279,9 +657,7 @@ "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", @@ -1291,9 +667,7 @@ "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 - }, + "integrations": { "All": true }, "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "originalTimestamp": "2020-03-23T03:46:30.921Z", "properties": { @@ -1318,98 +692,5 @@ "messageId": "78102118-56ac-4c5a-a495-8cd7c8f71cc2", "sourceId": "1YhwKyDcKstudlGxkeN5p2wgsrp" } - }, - { - "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": "" - } - ], - "blacklistedEvents": [ - { - "eventName": "black_event" - } - ] - }, - "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" - } } ] diff --git a/test/__tests__/data/slack_output.json b/test/__tests__/data/slack_output.json index c8559b713c..5c8495c757 100644 --- a/test/__tests__/data/slack_output.json +++ b/test/__tests__/data/slack_output.json @@ -1,25 +1,4 @@ [ - { - "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": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "payload": "{\"text\":\"Identified my-namehiji: hulala \",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, { "error": "Event type page is not supported" }, @@ -28,9 +7,7 @@ "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, + "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "params": {}, "body": { "JSON": {}, @@ -44,84 +21,19 @@ "userId": "12345", "statusCode": 200 }, - { - "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": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "payload": "{\"text\":\"my-name performed test_isent1 with test_val1 test_val2 and traits hulala\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - { - "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": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "payload": "{\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, - { - "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": {}, - "XML": {}, - "JSON_ARRAY": {}, - "FORM": { - "payload": "{\"text\":\"my-name did test_eventing_test\"}" - } - }, - "files": {}, - "userId": "12345", - "statusCode": 200 - }, { "version": "1", "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, + "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "params": {}, "body": { "JSON": {}, "XML": {}, "JSON_ARRAY": {}, "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\"}" + "payload": "{\"channel\":\"#slack_integration\",\"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": {}, @@ -133,16 +45,14 @@ "type": "REST", "method": "POST", "endpoint": "https://hooks.slack.com/services/THZM86VSS/BV9HZ2UN6/demo", - "headers": { - "Content-Type": "application/x-www-form-urlencoded" - }, + "headers": { "Content-Type": "application/x-www-form-urlencoded" }, "params": {}, "body": { "JSON": {}, "XML": {}, "JSON_ARRAY": {}, "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\"}" + "payload": "{\"channel\":\"#slack_integration\",\"text\":\"my-name performed test_eventing_testis with test_val1 test_val2\",\"username\":\"RudderStack\",\"icon_url\":\"https://cdn.rudderlabs.com/rudderstack.png\"}" } }, "files": {}, @@ -157,8 +67,5 @@ }, { "error": "Something is wrong with the event template: '{{name}} performed {{event}} with {{properties. key1}} {{properties.key2}} and traits {{traitsList.hiji}}'" - }, - { - "error": "Event is blacklisted. Please check configuration." } ] diff --git a/test/__tests__/data/snapchat_custom_audience_proxy_output.json b/test/__tests__/data/snapchat_custom_audience_proxy_output.json index e5bcc4faa8..654d94c45c 100644 --- a/test/__tests__/data/snapchat_custom_audience_proxy_output.json +++ b/test/__tests__/data/snapchat_custom_audience_proxy_output.json @@ -43,7 +43,6 @@ }, { "output": { - "authErrorCategory": "AUTH_STATUS_INACTIVE", "status": 400, "destinationResponse": { "response": { diff --git a/test/__tests__/data/twitter_ads.json b/test/__tests__/data/twitter_ads.json index 53c7c19929..ed2ab13ddf 100644 --- a/test/__tests__/data/twitter_ads.json +++ b/test/__tests__/data/twitter_ads.json @@ -136,7 +136,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "543" + "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" } ] } @@ -360,7 +360,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "543" + "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" } ] } @@ -692,7 +692,7 @@ "hashed_phone_number": "b308962b96b40cce7981493a372db9478edae79f83c2d8ca6cd15a39566f8c56" }, { - "twclid": "543" + "twclid": "18beb4813723e788a1d79bcbf80802538ec813aa19ded2e9c21cbf08bed6bee3" } ] } diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js deleted file mode 100644 index ee748a1a2b..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/aliases.js +++ /dev/null @@ -1,427 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey", - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "alias", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CITY": "Disney", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "COUNTRY": "USA", - "EMAIL": "mickey@disney.com", - "FIRSTNAME": "Mickey", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CITY": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "COUNTRY": "string", - "EMAIL": "string", - "FIRSTNAME": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP_N_1": "string", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "ALIASES" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js deleted file mode 100644 index 906c3ada23..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/extract.js +++ /dev/null @@ -1,278 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - sources: { - job_id: "djfhksdjhfkjdhfkjahkf", - version: "1169/merge", - job_run_id: "job_run_id", - task_run_id: "task_run_id" - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" - }, - event: "Product Added", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - recordId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - PMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - type: "extract", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map_n_1": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - rs: [ - { - "data": { - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map_n_1": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - bq: [ - { - "data": { - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map_n_1": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "loaded_at": "datetime", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - postgres: [ - { - "data": { - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map_n_1": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - snowflake: [ - { - "data": { - "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_SOURCES_JOB_ID": "djfhksdjhfkjdhfkjahkf", - "CONTEXT_SOURCES_JOB_RUN_ID": "job_run_id", - "CONTEXT_SOURCES_TASK_RUN_ID": "task_run_id", - "CONTEXT_SOURCES_VERSION": "1169/merge", - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "EVENT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "P_MAP_NESTED_MAP_N_1": "nested prop 1", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50 - }, - "metadata": { - "columns": { - "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_SOURCES_JOB_ID": "string", - "CONTEXT_SOURCES_JOB_RUN_ID": "string", - "CONTEXT_SOURCES_TASK_RUN_ID": "string", - "CONTEXT_SOURCES_VERSION": "string", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "EVENT": "string", - "ID": "string", - "P_MAP_NESTED_MAP_N_1": "string", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PRODUCT_ADDED" - } - } - ] - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js deleted file mode 100644 index 13b243f3a7..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/groups.js +++ /dev/null @@ -1,432 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey", - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - GCS_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "group", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "_groups" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CITY": "Disney", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "COUNTRY": "USA", - "EMAIL": "mickey@disney.com", - "FIRSTNAME": "Mickey", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CITY": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "COUNTRY": "string", - "EMAIL": "string", - "FIRSTNAME": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP_N_1": "string", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "GROUPS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js deleted file mode 100644 index 47b7f1209a..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/identifies.js +++ /dev/null @@ -1,850 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - type: "identify", - sentAt: "2021-01-03T17:02:53.195Z", - userId: "user123", - channel: "web", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "CTMap.nestedMap", - "TMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "CTMap.nestedMap", - "TMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "CTMap.nestedMap", - "TMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "CTMap.nestedMap", - "TMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - userProperties: { - email: "test@gmail.com", - UPMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - traits: { - TMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - 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", - CTMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-US", - 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" - }, - rudderId: "8f8fa6b5-8e24-489c-8e22-61f23f2e364f", - messageId: "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - anonymousId: "97c46c81-3140-456d-b2a9-690d70aaca35", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - timestamp: "2020-01-24T11:59:02.403+05:30" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map_n_1": "string", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map_n_1": "nested prop 1", - "up_map_nested_map_n_1": "nested prop 1" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map_n_1": "string", - "up_map_nested_map_n_1": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map_n_1": "string", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map_n_1": "nested prop 1", - "up_map_nested_map_n_1": "nested prop 1" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map_n_1": "string", - "up_map_nested_map_n_1": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map_n_1": "string", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map_n_1": "nested prop 1", - "up_map_nested_map_n_1": "nested prop 1" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "loaded_at": "datetime", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map_n_1": "string", - "up_map_nested_map_n_1": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map_n_1": "string", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map_n_1": "nested prop 1", - "up_map_nested_map_n_1": "nested prop 1" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map_n_1": "string", - "up_map_nested_map_n_1": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "97c46c81-3140-456d-b2a9-690d70aaca35", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.1.11", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_DEVICE_ID": "id", - "CONTEXT_DEVICE_TOKEN": "token", - "CONTEXT_DEVICE_TYPE": "ios", - "CONTEXT_IP": "[::1]:53708", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.1.11", - "CONTEXT_LOCALE": "en-US", - "CONTEXT_OS_NAME": "android", - "CONTEXT_OS_VERSION": "1.12.3", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "nested prop 1", - "CONTEXT_TRAITS_EMAIL": "user123@email.com", - "CONTEXT_TRAITS_PHONE": "+917836362334", - "CONTEXT_TRAITS_USER_ID": "user123", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "CT_MAP_NESTED_MAP_N_1": "nested prop 1", - "EMAIL": "user123@email.com", - "ID": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "PHONE": "+917836362334", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2021-01-03T17:02:53.195Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "T_MAP_NESTED_MAP_N_1": "nested prop 1", - "UP_MAP_NESTED_MAP_N_1": "nested prop 1", - "USER_ID": "user123" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_DEVICE_ID": "string", - "CONTEXT_DEVICE_TOKEN": "string", - "CONTEXT_DEVICE_TYPE": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_OS_NAME": "string", - "CONTEXT_OS_VERSION": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_PHONE": "string", - "CONTEXT_TRAITS_USER_ID": "string", - "CONTEXT_USER_AGENT": "string", - "CT_MAP_NESTED_MAP_N_1": "string", - "EMAIL": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "PHONE": "string", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "T_MAP_NESTED_MAP_N_1": "string", - "UP_MAP_NESTED_MAP_N_1": "string", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "IDENTIFIES" - } - }, - { - "data": { - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.1.11", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_DEVICE_ID": "id", - "CONTEXT_DEVICE_TOKEN": "token", - "CONTEXT_DEVICE_TYPE": "ios", - "CONTEXT_IP": "[::1]:53708", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.1.11", - "CONTEXT_LOCALE": "en-US", - "CONTEXT_OS_NAME": "android", - "CONTEXT_OS_VERSION": "1.12.3", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "nested prop 1", - "CONTEXT_TRAITS_EMAIL": "user123@email.com", - "CONTEXT_TRAITS_PHONE": "+917836362334", - "CONTEXT_TRAITS_USER_ID": "user123", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "CT_MAP_NESTED_MAP_N_1": "nested prop 1", - "EMAIL": "user123@email.com", - "ID": "user123", - "PHONE": "+917836362334", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "T_MAP_NESTED_MAP_N_1": "nested prop 1", - "UP_MAP_NESTED_MAP_N_1": "nested prop 1" - }, - "metadata": { - "columns": { - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_DEVICE_ID": "string", - "CONTEXT_DEVICE_TOKEN": "string", - "CONTEXT_DEVICE_TYPE": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_OS_NAME": "string", - "CONTEXT_OS_VERSION": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_PHONE": "string", - "CONTEXT_TRAITS_USER_ID": "string", - "CONTEXT_USER_AGENT": "string", - "CT_MAP_NESTED_MAP_N_1": "string", - "EMAIL": "string", - "ID": "string", - "PHONE": "string", - "RECEIVED_AT": "datetime", - "T_MAP_NESTED_MAP_N_1": "string", - "UP_MAP_NESTED_MAP_N_1": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "USERS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js deleted file mode 100644 index 0aac8a3c23..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/pages.js +++ /dev/null @@ -1,405 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "testMap.nestedMap", - "ctestMap.cnestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "page", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP_N_1": "string", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PAGES" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js deleted file mode 100644 index bad325c908..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/screens.js +++ /dev/null @@ -1,405 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "testMap.nestedMap", - ".ctestMap.cnestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "testMap.nestedMap", - ".ctestMap.cnestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "testMap.nestedMap", - ".ctestMap.cnestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "testMap.nestedMap", - ".ctestMap.cnestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "screen", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP_N_1": "nested prop 1", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP_N_1": "string", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "SCREENS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js b/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js deleted file mode 100644 index 5070284e99..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/legacy/tracks.js +++ /dev/null @@ -1,830 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - locale: "en-GB", - screen: { - density: 2 - }, - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey" - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" - }, - event: "Product Added", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "UPMap.nestedMap", - "PMap.nestedMap", - "CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - userProperties: { - email: "test@gmail.com", - UPMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - properties: { - currency: "USD", - revenue: 50, - PMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "track", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "p_map_nested_map": "string", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_TRAITS_CITY": "Disney", - "CONTEXT_TRAITS_COUNTRY": "USA", - "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", - "CONTEXT_TRAITS_FIRSTNAME": "Mickey", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "EVENT": "product_added", - "EVENT_TEXT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_TRAITS_CITY": "string", - "CONTEXT_TRAITS_COUNTRY": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_FIRSTNAME": "string", - "CONTEXT_USER_AGENT": "string", - "EVENT": "string", - "EVENT_TEXT": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "TRACKS" - } - }, - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "context nested prop 1", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_TRAITS_CITY": "Disney", - "CONTEXT_TRAITS_COUNTRY": "USA", - "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", - "CONTEXT_TRAITS_FIRSTNAME": "Mickey", - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "EMAIL": "test@gmail.com", - "EVENT": "product_added", - "EVENT_TEXT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP_N_1": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_TRAITS_CITY": "string", - "CONTEXT_TRAITS_COUNTRY": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_FIRSTNAME": "string", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "EMAIL": "string", - "EVENT": "string", - "EVENT_TEXT": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "P_MAP_NESTED_MAP": "json", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "UP_MAP_NESTED_MAP": "json", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PRODUCT_ADDED" - } - } - ] - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js deleted file mode 100644 index 91f19c5c77..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/aliases.js +++ /dev/null @@ -1,415 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey", - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] - } - }, - BQ: { - options: { - jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] - } - }, - POSTGRES: { - options: { - jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: ["alias.traits.testMap.nestedMap", "alias.context.ctestMap.cnestedMap"] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "alias", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "aliases" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CITY": "Disney", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "COUNTRY": "USA", - "EMAIL": "mickey@disney.com", - "FIRSTNAME": "Mickey", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CITY": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "COUNTRY": "string", - "EMAIL": "string", - "FIRSTNAME": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP": "json", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "ALIASES" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js deleted file mode 100644 index 7a36e4787e..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/extract.js +++ /dev/null @@ -1,278 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - sources: { - job_id: "djfhksdjhfkjdhfkjahkf", - version: "1169/merge", - job_run_id: "job_run_id", - task_run_id: "task_run_id" - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" - }, - event: "Product Added", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "extract.properties.PMap.nestedMap", - "extract.context.CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "extract.properties.PMap.nestedMap", - "extract.context.CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "extract.properties.PMap.nestedMap", - "extract.context.CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "extract.properties.PMap.nestedMap", - "extract.context.CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - recordId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - PMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - type: "extract", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map_n_1": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - rs: [ - { - "data": { - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map": "json", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - bq:[ - { - "data": { - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map": "string", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "loaded_at": "datetime", - "p_map_nested_map": "string", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - postgres: [ - { - "data": { - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_sources_job_id": "djfhksdjhfkjdhfkjahkf", - "context_sources_job_run_id": "job_run_id", - "context_sources_task_run_id": "task_run_id", - "context_sources_version": "1169/merge", - "context_user_agent": "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", - "currency": "USD", - "event": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50 - }, - "metadata": { - "columns": { - "context_c_map_nested_map": "json", - "context_sources_job_id": "string", - "context_sources_job_run_id": "string", - "context_sources_task_run_id": "string", - "context_sources_version": "string", - "context_user_agent": "string", - "currency": "string", - "event": "string", - "id": "string", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - snowflake: [ - { - "data": { - "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_SOURCES_JOB_ID": "djfhksdjhfkjdhfkjahkf", - "CONTEXT_SOURCES_JOB_RUN_ID": "job_run_id", - "CONTEXT_SOURCES_TASK_RUN_ID": "task_run_id", - "CONTEXT_SOURCES_VERSION": "1169/merge", - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "EVENT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50 - }, - "metadata": { - "columns": { - "CONTEXT_C_MAP_NESTED_MAP": "json", - "CONTEXT_SOURCES_JOB_ID": "string", - "CONTEXT_SOURCES_JOB_RUN_ID": "string", - "CONTEXT_SOURCES_TASK_RUN_ID": "string", - "CONTEXT_SOURCES_VERSION": "string", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "EVENT": "string", - "ID": "string", - "P_MAP_NESTED_MAP": "json", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PRODUCT_ADDED" - } - } - ] - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js deleted file mode 100644 index f84f9d33ed..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/groups.js +++ /dev/null @@ -1,420 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey", - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] - } - }, - BQ: { - options: { - jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] - } - }, - POSTGRES: { - options: { - jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: ["group.traits.testMap.nestedMap", "group.context.ctestMap.cnestedMap"] - } - }, - GCS_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "group", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "_groups" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "city": "Disney", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "country": "USA", - "email": "mickey@disney.com", - "firstname": "Mickey", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "city": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "country": "string", - "email": "string", - "firstname": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "groups" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CITY": "Disney", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "COUNTRY": "USA", - "EMAIL": "mickey@disney.com", - "FIRSTNAME": "Mickey", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CITY": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "COUNTRY": "string", - "EMAIL": "string", - "FIRSTNAME": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP": "json", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "GROUPS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js deleted file mode 100644 index 3d6164b430..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/identifies.js +++ /dev/null @@ -1,850 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - type: "identify", - sentAt: "2021-01-03T17:02:53.195Z", - userId: "user123", - channel: "web", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "identify.userProperties.UPMap.nestedMap", - "identify.context.traits.CTMap.nestedMap", - "identify.traits.TMap.nestedMap", - "identify.context.CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "identify.userProperties.UPMap.nestedMap", - "identify.context.traits.CTMap.nestedMap", - "identify.traits.TMap.nestedMap", - "identify.context.CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "identify.userProperties.UPMap.nestedMap", - "identify.context.traits.CTMap.nestedMap", - "identify.traits.TMap.nestedMap", - "identify.context.CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "identify.userProperties.UPMap.nestedMap", - "identify.context.traits.CTMap.nestedMap", - "identify.traits.TMap.nestedMap", - "identify.context.CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - userProperties: { - email: "test@gmail.com", - UPMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - traits: { - TMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - context: { - 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", - CTMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-US", - 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" - }, - rudderId: "8f8fa6b5-8e24-489c-8e22-61f23f2e364f", - messageId: "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - anonymousId: "97c46c81-3140-456d-b2a9-690d70aaca35", - originalTimestamp: "2020-01-24T06:29:02.364Z", - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - timestamp: "2020-01-24T11:59:02.403+05:30" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map_n_1": "string", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map_n_1": "nested prop 1", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map_n_1": "nested prop 1", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map_n_1": "nested prop 1", - "up_map_nested_map_n_1": "nested prop 1" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map_n_1": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map_n_1": "string", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map_n_1": "string", - "up_map_nested_map_n_1": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "json", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "json", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map": "json", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "json", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "json", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map": "json", - "up_map_nested_map": "json", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "string", - "email": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map": "string", - "timestamp": "datetime", - "up_map_nested_map": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "string", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "string", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "string", - "email": "string", - "id": "string", - "loaded_at": "datetime", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map": "string", - "up_map_nested_map": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "97c46c81-3140-456d-b2a9-690d70aaca35", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2021-01-03T17:02:53.195Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "user123" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "json", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "json", - "email": "string", - "id": "string", - "original_timestamp": "datetime", - "phone": "string", - "received_at": "datetime", - "sent_at": "datetime", - "t_map_nested_map": "json", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "identifies" - } - }, - { - "data": { - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.1.11", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_device_id": "id", - "context_device_token": "token", - "context_device_type": "ios", - "context_ip": "[::1]:53708", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.1.11", - "context_locale": "en-US", - "context_os_name": "android", - "context_os_version": "1.12.3", - "context_request_ip": "[::1]:53708", - "context_traits_ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "context_traits_email": "user123@email.com", - "context_traits_phone": "+917836362334", - "context_traits_user_id": "user123", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "ct_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "email": "user123@email.com", - "id": "user123", - "phone": "+917836362334", - "received_at": "2020-01-24T06:29:02.403Z", - "t_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}" - }, - "metadata": { - "columns": { - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_device_id": "string", - "context_device_token": "string", - "context_device_type": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_os_name": "string", - "context_os_version": "string", - "context_request_ip": "string", - "context_traits_ct_map_nested_map": "json", - "context_traits_email": "string", - "context_traits_phone": "string", - "context_traits_user_id": "string", - "context_user_agent": "string", - "ct_map_nested_map": "json", - "email": "string", - "id": "string", - "phone": "string", - "received_at": "datetime", - "t_map_nested_map": "json", - "up_map_nested_map": "json", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "users" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "97c46c81-3140-456d-b2a9-690d70aaca35", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.1.11", - "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_DEVICE_ID": "id", - "CONTEXT_DEVICE_TOKEN": "token", - "CONTEXT_DEVICE_TYPE": "ios", - "CONTEXT_IP": "[::1]:53708", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.1.11", - "CONTEXT_LOCALE": "en-US", - "CONTEXT_OS_NAME": "android", - "CONTEXT_OS_VERSION": "1.12.3", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "CONTEXT_TRAITS_EMAIL": "user123@email.com", - "CONTEXT_TRAITS_PHONE": "+917836362334", - "CONTEXT_TRAITS_USER_ID": "user123", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "EMAIL": "user123@email.com", - "ID": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "PHONE": "+917836362334", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2021-01-03T17:02:53.195Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "T_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "USER_ID": "user123" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP": "json", - "CONTEXT_DEVICE_ID": "string", - "CONTEXT_DEVICE_TOKEN": "string", - "CONTEXT_DEVICE_TYPE": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_OS_NAME": "string", - "CONTEXT_OS_VERSION": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "json", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_PHONE": "string", - "CONTEXT_TRAITS_USER_ID": "string", - "CONTEXT_USER_AGENT": "string", - "CT_MAP_NESTED_MAP": "json", - "EMAIL": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "PHONE": "string", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "T_MAP_NESTED_MAP": "json", - "UP_MAP_NESTED_MAP": "json", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "IDENTIFIES" - } - }, - { - "data": { - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.1.11", - "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_DEVICE_ID": "id", - "CONTEXT_DEVICE_TOKEN": "token", - "CONTEXT_DEVICE_TYPE": "ios", - "CONTEXT_IP": "[::1]:53708", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.1.11", - "CONTEXT_LOCALE": "en-US", - "CONTEXT_OS_NAME": "android", - "CONTEXT_OS_VERSION": "1.12.3", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "CONTEXT_TRAITS_EMAIL": "user123@email.com", - "CONTEXT_TRAITS_PHONE": "+917836362334", - "CONTEXT_TRAITS_USER_ID": "user123", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0", - "CT_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "EMAIL": "user123@email.com", - "ID": "user123", - "PHONE": "+917836362334", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "T_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}" - }, - "metadata": { - "columns": { - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP": "json", - "CONTEXT_DEVICE_ID": "string", - "CONTEXT_DEVICE_TOKEN": "string", - "CONTEXT_DEVICE_TYPE": "string", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_OS_NAME": "string", - "CONTEXT_OS_VERSION": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_TRAITS_CT_MAP_NESTED_MAP": "json", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_PHONE": "string", - "CONTEXT_TRAITS_USER_ID": "string", - "CONTEXT_USER_AGENT": "string", - "CT_MAP_NESTED_MAP": "json", - "EMAIL": "string", - "ID": "string", - "PHONE": "string", - "RECEIVED_AT": "datetime", - "T_MAP_NESTED_MAP": "json", - "UP_MAP_NESTED_MAP": "json", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "USERS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js deleted file mode 100644 index 136f355b21..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/pages.js +++ /dev/null @@ -1,393 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] - } - }, - BQ: { - options: { - jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] - } - }, - POSTGRES: { - options: { - jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: ["page.properties.testMap.nestedMap", "page.context.ctestMap.cnestedMap"] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "page", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "pages" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP": "json", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PAGES" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js deleted file mode 100644 index b11b311ebb..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/screens.js +++ /dev/null @@ -1,393 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - ctestMap: { - cnestedMap: { - n1: "context nested prop 1" - } - }, - locale: "en-GB", - 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.117 Safari/537.36" - }, - integrations: { - All: true, - RS: { - options: { - jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] - } - }, - BQ: { - options: { - jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] - } - }, - POSTGRES: { - options: { - jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: ["screen.properties.testMap.nestedMap", "screen.context.ctestMap.cnestedMap"] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - properties: { - currency: "USD", - revenue: 50, - testMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "screen", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map_n_1": "nested prop 1", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map_n_1": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "string", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_ctest_map_cnested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_user_agent": "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", - "currency": "USD", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "test_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_ctest_map_cnested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_user_agent": "string", - "currency": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "test_map_nested_map": "json", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "screens" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TEST_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_CTEST_MAP_CNESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TEST_MAP_NESTED_MAP": "json", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "SCREENS" - } - } - ], - } -} diff --git a/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js b/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js deleted file mode 100644 index 7ed95685ff..0000000000 --- a/test/__tests__/data/warehouse/integrations/jsonpaths/new/tracks.js +++ /dev/null @@ -1,830 +0,0 @@ -module.exports = { - input: { - destination: { - Config: {} - }, - message: { - anonymousId: "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - channel: "web", - context: { - app: { - build: "1.0.0", - name: "RudderLabs JavaScript SDK", - namespace: "com.rudderlabs.javascript", - version: "1.0.5" - }, - ip: "0.0.0.0", - library: { - name: "RudderLabs JavaScript SDK", - version: "1.0.5" - }, - locale: "en-GB", - screen: { - density: 2 - }, - traits: { - city: "Disney", - country: "USA", - email: "mickey@disney.com", - firstname: "Mickey" - }, - CMap: { - nestedMap: { - n1: "context nested prop 1" - } - }, - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36" - }, - event: "Product Added", - integrations: { - All: true, - RS: { - options: { - jsonPaths: [ - "track.userProperties.UPMap.nestedMap", - "track.properties.PMap.nestedMap", - "track.context.CMap.nestedMap", - ] - } - }, - BQ: { - options: { - jsonPaths: [ - "track.userProperties.UPMap.nestedMap", - "track.properties.PMap.nestedMap", - "track.context.CMap.nestedMap", - ] - } - }, - POSTGRES: { - options: { - jsonPaths: [ - "track.userProperties.UPMap.nestedMap", - "track.properties.PMap.nestedMap", - "track.context.CMap.nestedMap", - ] - } - }, - SNOWFLAKE: { - options: { - jsonPaths: [ - "track.userProperties.UPMap.nestedMap", - "track.properties.PMap.nestedMap", - "track.context.CMap.nestedMap", - ] - } - }, - S3_DATALAKE: { - options: { - skipReservedKeywordsEscaping: true - } - }, - }, - messageId: "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - originalTimestamp: "2020-01-24T06:29:02.364Z", - userProperties: { - email: "test@gmail.com", - UPMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - properties: { - currency: "USD", - revenue: 50, - PMap: { - nestedMap: { - n1: "nested prop 1" - } - }, - }, - receivedAt: "2020-01-24T11:59:02.403+05:30", - request_ip: "[::1]:53708", - sentAt: "2020-01-24T06:29:02.364Z", - timestamp: "2020-01-24T11:59:02.403+05:30", - type: "track", - userId: "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - request: { - query: { - whSchemaVersion: "v1" - } - } - }, - output: { - default: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map_n_1": "context nested prop 1", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map_n_1": "nested prop 1", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map_n_1": "nested prop 1", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map_n_1": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map_n_1": "string", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map_n_1": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - rs: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - bq: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "string", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "loaded_at": "datetime", - "original_timestamp": "datetime", - "p_map_nested_map": "string", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "string", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - postgres: [ - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "received_at": "2020-01-24T06:29:02.403Z", - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "received_at": "datetime", - "sent_at": "datetime", - "timestamp": "datetime", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "tracks" - } - }, - { - "data": { - "anonymous_id": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "channel": "web", - "context_app_build": "1.0.0", - "context_app_name": "RudderLabs JavaScript SDK", - "context_app_namespace": "com.rudderlabs.javascript", - "context_app_version": "1.0.5", - "context_c_map_nested_map": "{\"n1\":\"context nested prop 1\"}", - "context_ip": "0.0.0.0", - "context_library_name": "RudderLabs JavaScript SDK", - "context_library_version": "1.0.5", - "context_locale": "en-GB", - "context_passed_ip": "0.0.0.0", - "context_request_ip": "[::1]:53708", - "context_screen_density": 2, - "context_traits_city": "Disney", - "context_traits_country": "USA", - "context_traits_email": "mickey@disney.com", - "context_traits_firstname": "Mickey", - "context_user_agent": "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", - "currency": "USD", - "email": "test@gmail.com", - "event": "product_added", - "event_text": "Product Added", - "id": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "original_timestamp": "2020-01-24T06:29:02.364Z", - "p_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "received_at": "2020-01-24T06:29:02.403Z", - "revenue": 50, - "sent_at": "2020-01-24T06:29:02.364Z", - "timestamp": "2020-01-24T06:29:02.403Z", - "up_map_nested_map": "{\"n1\":\"nested prop 1\"}", - "user_id": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "anonymous_id": "string", - "channel": "string", - "context_app_build": "string", - "context_app_name": "string", - "context_app_namespace": "string", - "context_app_version": "string", - "context_c_map_nested_map": "json", - "context_ip": "string", - "context_library_name": "string", - "context_library_version": "string", - "context_locale": "string", - "context_passed_ip": "string", - "context_request_ip": "string", - "context_screen_density": "int", - "context_traits_city": "string", - "context_traits_country": "string", - "context_traits_email": "string", - "context_traits_firstname": "string", - "context_user_agent": "string", - "currency": "string", - "email": "string", - "event": "string", - "event_text": "string", - "id": "string", - "original_timestamp": "datetime", - "p_map_nested_map": "json", - "received_at": "datetime", - "revenue": "int", - "sent_at": "datetime", - "timestamp": "datetime", - "up_map_nested_map": "json", - "user_id": "string", - "uuid_ts": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "product_added" - } - } - ], - snowflake: [ - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_TRAITS_CITY": "Disney", - "CONTEXT_TRAITS_COUNTRY": "USA", - "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", - "CONTEXT_TRAITS_FIRSTNAME": "Mickey", - "CONTEXT_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", - "EVENT": "product_added", - "EVENT_TEXT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_TRAITS_CITY": "string", - "CONTEXT_TRAITS_COUNTRY": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_FIRSTNAME": "string", - "CONTEXT_USER_AGENT": "string", - "EVENT": "string", - "EVENT_TEXT": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "RECEIVED_AT": "datetime", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "TRACKS" - } - }, - { - "data": { - "ANONYMOUS_ID": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca", - "CHANNEL": "web", - "CONTEXT_APP_BUILD": "1.0.0", - "CONTEXT_APP_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_APP_NAMESPACE": "com.rudderlabs.javascript", - "CONTEXT_APP_VERSION": "1.0.5", - "CONTEXT_C_MAP_NESTED_MAP": "{\"n1\":\"context nested prop 1\"}", - "CONTEXT_IP": "0.0.0.0", - "CONTEXT_LIBRARY_NAME": "RudderLabs JavaScript SDK", - "CONTEXT_LIBRARY_VERSION": "1.0.5", - "CONTEXT_LOCALE": "en-GB", - "CONTEXT_PASSED_IP": "0.0.0.0", - "CONTEXT_REQUEST_IP": "[::1]:53708", - "CONTEXT_SCREEN_DENSITY": 2, - "CONTEXT_TRAITS_CITY": "Disney", - "CONTEXT_TRAITS_COUNTRY": "USA", - "CONTEXT_TRAITS_EMAIL": "mickey@disney.com", - "CONTEXT_TRAITS_FIRSTNAME": "Mickey", - "CONTEXT_USER_AGENT": "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", - "CURRENCY": "USD", - "EMAIL": "test@gmail.com", - "EVENT": "product_added", - "EVENT_TEXT": "Product Added", - "ID": "a6a0ad5a-bd26-4f19-8f75-38484e580fc7", - "ORIGINAL_TIMESTAMP": "2020-01-24T06:29:02.364Z", - "P_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "RECEIVED_AT": "2020-01-24T06:29:02.403Z", - "REVENUE": 50, - "SENT_AT": "2020-01-24T06:29:02.364Z", - "TIMESTAMP": "2020-01-24T06:29:02.403Z", - "UP_MAP_NESTED_MAP": "{\"n1\":\"nested prop 1\"}", - "USER_ID": "9bb5d4c2-a7aa-4a36-9efb-dd2b1aec5d33" - }, - "metadata": { - "columns": { - "ANONYMOUS_ID": "string", - "CHANNEL": "string", - "CONTEXT_APP_BUILD": "string", - "CONTEXT_APP_NAME": "string", - "CONTEXT_APP_NAMESPACE": "string", - "CONTEXT_APP_VERSION": "string", - "CONTEXT_C_MAP_NESTED_MAP": "json", - "CONTEXT_IP": "string", - "CONTEXT_LIBRARY_NAME": "string", - "CONTEXT_LIBRARY_VERSION": "string", - "CONTEXT_LOCALE": "string", - "CONTEXT_PASSED_IP": "string", - "CONTEXT_REQUEST_IP": "string", - "CONTEXT_SCREEN_DENSITY": "int", - "CONTEXT_TRAITS_CITY": "string", - "CONTEXT_TRAITS_COUNTRY": "string", - "CONTEXT_TRAITS_EMAIL": "string", - "CONTEXT_TRAITS_FIRSTNAME": "string", - "CONTEXT_USER_AGENT": "string", - "CURRENCY": "string", - "EMAIL": "string", - "EVENT": "string", - "EVENT_TEXT": "string", - "ID": "string", - "ORIGINAL_TIMESTAMP": "datetime", - "P_MAP_NESTED_MAP": "json", - "RECEIVED_AT": "datetime", - "REVENUE": "int", - "SENT_AT": "datetime", - "TIMESTAMP": "datetime", - "UP_MAP_NESTED_MAP": "json", - "USER_ID": "string", - "UUID_TS": "datetime" - }, - "receivedAt": "2020-01-24T11:59:02.403+05:30", - "table": "PRODUCT_ADDED" - } - } - ] - } -} diff --git a/test/__tests__/flatten_events.test.js b/test/__tests__/flatten_events.test.js index 502140bccd..2e3f142aca 100644 --- a/test/__tests__/flatten_events.test.js +++ b/test/__tests__/flatten_events.test.js @@ -9,7 +9,7 @@ Key aspects covered: 2. Coud source event - same as above for nested property under level 3 - Above level 3 are stringified and considered as string type - 3. Introducing jsonLegacyPathKeys for BQ, PG, RS, SF + 3. Introducing jsonKeys for BQ, PG, RS, SF - data types: int, float, string, json - number, string, array, objects fit under json data type, value is json stringified - in BQ, json type is just a string data type @@ -83,8 +83,8 @@ describe("Flatten event properties", () => { expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of sample event if jsonLegacyPathKeys are present", () => { - options.jsonLegacyPathKeys = { + it("Should stringify properties of sample event if jsonKeys are present", () => { + options.jsonKeys = { arrayProp: 0, objectProp_firstLevelMap_secondLevelMap: 2 }; @@ -98,14 +98,14 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; const expected = fOutput("json_key_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of sample event and jsonLegacyPathKeys has more priority than cloud source at level 3", () => { - options.jsonLegacyPathKeys = { + it("Should stringify properties of sample event and jsonKeys has more priority than cloud source at level 3", () => { + options.jsonKeys = { objectProp_firstLevelMap_secondLevelMap_thirdLevelMap: 3 }; options.sourceCategory = "cloud"; @@ -119,15 +119,15 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; delete options.sourceCategory; const expected = fOutput("json_key_cloud_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should stringify properties of nested event and jsonLegacyPathKeys is not applied for cloud source at level > 3", () => { - options.jsonLegacyPathKeys = { + it("Should stringify properties of nested event and jsonKeys is not applied for cloud source at level > 3", () => { + options.jsonKeys = { objectProp_firstLevelMap_secondLevelMap_thirdLevelMap_fourthLevelMap: 4, arrayProp: 0 }; @@ -142,15 +142,15 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; delete options.sourceCategory; const expected = fOutput("cloud_json_key_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should flatten all properties of sample event and jsonLegacyPathKeys is not applicable other than track events", () => { - options.jsonLegacyPathKeys = { arrayProp: 0 }; + it("Should flatten all properties of sample event and jsonkeys is not applicable other than track events", () => { + options.jsonKeys = { arrayProp: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -161,19 +161,19 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; // Will be same as flattening all properties const expected = fOutput("sample_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should flatten all properties of sample event and declared jsonLegacyPathKeys get stringified primitive values", () => { + it("Should flatten all properties of sample event and declared jsonKeys get stringified primitive values", () => { i.dateProp = "2022-01-01T00:00:00.000Z"; i.objectProp.firstLevelDateProp = "2022-01-01T01:01:01.111Z"; i.objectProp.firstLevelMap.secondLevelDateProp = "2022-01-01T02:02:02.222Z"; - options.jsonLegacyPathKeys = { + options.jsonKeys = { nullProp: 0, blankProp: 0, floatProp: 0, @@ -195,7 +195,7 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; delete i.dateProp; delete i.objectProp.firstLevelDateProp; delete i.objectProp.firstLevelMap.secondLevelDateProp; @@ -204,12 +204,12 @@ describe("Flatten event properties", () => { expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should ignore rudder reserved columns even though they are set as jsonLegacyPathKeys", () => { + it("Should ignore rudder reserved columns even though they are set as jsonKeys", () => { // setting two reserved columns as map i.anonymous_id = "ignored column"; i.timestamp = "ignored column"; // setting reserved colum paths as json keys - options.jsonLegacyPathKeys = { anonymous_id: 0, timestamp: 0 }; + options.jsonKeys = { anonymous_id: 0, timestamp: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -220,19 +220,19 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; // Will be same as flattening all properties with reserved columns being ignored const expected = fOutput("sample_event", integrations[index]); expect(output).toEqual(expected.output); expect(columnTypes).toEqual(expected.columnTypes); }); - it("Should apply escaping on WH reserved columns even though they are set as jsonLegacyPathKeys", () => { + it("Should apply escaping on WH reserved columns even though they are set as jsonKeys", () => { // setting two reserved columns as map i.between = "escaped column"; i.as = "escaped column"; // setting reserved colum paths as json keys - options.jsonLegacyPathKeys = { between: 0, as: 0 }; + options.jsonKeys = { between: 0, as: 0 }; const output = {}; const columnTypes = {}; setDataFromInputAndComputeColumnTypes( @@ -243,7 +243,7 @@ describe("Flatten event properties", () => { columnTypes, options ); - delete options.jsonLegacyPathKeys; + delete options.jsonKeys; // Escaping is applied as usual for json keys too const expected = fOutput("escape_event", integrations[index]); expect(output).toEqual(expected.output); 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__/google_adwords_offline_conversions.test.js b/test/__tests__/google_adwords_offline_conversions.test.js index b08b6de968..d1edec7b58 100644 --- a/test/__tests__/google_adwords_offline_conversions.test.js +++ b/test/__tests__/google_adwords_offline_conversions.test.js @@ -45,7 +45,7 @@ axios.mockImplementation(async config => { // httpSend() -> inside ProxyRequest for google_adwords_offline if ( config.url.includes( - "https://googleads.googleapis.com/v14/customers/1234567891:uploadClickConversions" + "https://googleads.googleapis.com/v13/customers/1234567891:uploadClickConversions" ) ) { return { @@ -74,7 +74,7 @@ axios.post = jest.fn(async (url, data, reqConfig) => { // This mocking is for calls that make use of httpPOST() if ( url.includes( - "https://googleads.googleapis.com/v14/customers/1234567891/googleAds:searchStream" + "https://googleads.googleapis.com/v13/customers/1234567891/googleAds:searchStream" ) ) { // this is for true case @@ -126,7 +126,7 @@ axios.post = jest.fn(async (url, data, reqConfig) => { } } else if ( url.includes( - "https://googleads.googleapis.com/v14/customers/1234567890/googleAds:searchStream" + "https://googleads.googleapis.com/v13/customers/1234567890/googleAds:searchStream" ) ) { // this case is for refresh token expire @@ -145,12 +145,12 @@ axios.post = jest.fn(async (url, data, reqConfig) => { }; } else if ( url.includes( - "https://googleads.googleapis.com/v14/customers/1112223333/googleAds:searchStream" + "https://googleads.googleapis.com/v13/customers/1112223333/googleAds:searchStream" ) || url.includes( - "https://googleads.googleapis.com/v14/customers/111-222-3333/googleAds:searchStream" + "https://googleads.googleapis.com/v13/customers/111-222-3333/googleAds:searchStream" ) || url.includes( - "https://googleads.googleapis.com/v14/customers/customer-id/googleAds:searchStream" + "https://googleads.googleapis.com/v13/customers/customer-id/googleAds:searchStream" ) ) { // this is for store case 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__/slack.test.js b/test/__tests__/slack.test.js index eec0f4054f..c2b5b91ede 100644 --- a/test/__tests__/slack.test.js +++ b/test/__tests__/slack.test.js @@ -29,7 +29,7 @@ const inputRouterData = JSON.parse(inputRouterDataFile); const expectedRouterData = JSON.parse(outputRouterDataFile); inputData.forEach((input, index) => { - test(`${name} Tests - payload: ${index}`, () => { + test(`${name} Tests - payload: %{index}`, () => { try { const output = transformer.process(input); expect(output).toEqual([expectedData[index]]); diff --git a/test/__tests__/user_transformation_fetch.test.js b/test/__tests__/user_transformation_fetch.test.js index e37b42ea1e..d5849639d7 100644 --- a/test/__tests__/user_transformation_fetch.test.js +++ b/test/__tests__/user_transformation_fetch.test.js @@ -4,7 +4,8 @@ jest.mock("dns", () => { promises: { Resolver: function() { return { - resolve4: mockResolver, + resolve: mockResolver, + setServers: () => {}, }; } } @@ -120,7 +121,7 @@ describe("User transformation fetch tests", () => { } ` }; - const errMsg = "invalid url, localhost requests are not allowed"; + const errMsg = "localhost requests are not allowed"; const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); @@ -277,7 +278,7 @@ describe("User transformation fetch tests", () => { } ` }; - const errMsg = "invalid url, localhost requests are not allowed"; + const errMsg = "localhost requests are not allowed"; const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index 045bab35a6..6d8b490208 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -30,10 +30,7 @@ const integrations = [ "snowflake", "mssql", "azure_synapse", - "deltalake", - "azure_datalake", - "s3_datalake", - "gcs_datalake", + "s3_datalake" ]; const transformers = integrations.map(integration => require(`../../src/${version}/destinations/${integration}/transform`) @@ -232,7 +229,7 @@ describe("column & table names", () => { ); return; } - if (integrations[index] === "s3_datalake" || integrations[index] === "gcs_datalake" || integrations[index] === "azure_datalake") { + if (integrations[index] === "s3_datalake") { expect(received[1].metadata).toHaveProperty( "table", "a_1_a_2_a_3_a_4_a_5_b_1_b_2_b_3_b_4_b_5_c_1_c_2_c_3_c_4_c_5_d_1_d_2_d_3_d_4_d_5_e_1_e_2_e_3_e_4_e_5_f_1_f_2_f_3_f_4_f_5_g_1_g_2_g_3_g_4_g_5" @@ -946,7 +943,7 @@ describe("Handle no of columns in an event", () => { it("should throw an error if no of columns are more than 200", () => { const i = input("track"); transformers - .filter((transformer, index) => integrations[index] !== "s3_datalake" && integrations[index] !== "gcs_datalake" && integrations[index] !== "azure_datalake") + .filter((transformer, index) => integrations[index] !== "s3_datalake") .forEach((transformer, index) => { i.message.properties = largeNoOfColumnsevent; expect(() => transformer.process(i)).toThrow( @@ -1012,7 +1009,7 @@ describe("Integration options", () => { it("should generate two events for every track call", () => { const i = opInput("track"); transformers.forEach((transformer, index) => { - const {jsonPaths} = i.destination.Config; + const { jsonPaths } = i.destination.Config; if (integrations[index] === "postgres") { delete i.destination.Config.jsonPaths; } @@ -1022,7 +1019,6 @@ describe("Integration options", () => { }); }); }); - describe("users", () => { it("should skip users when skipUsersTable is set", () => { const i = opInput("users"); @@ -1032,65 +1028,6 @@ describe("Integration options", () => { }); }); }); - - describe("json paths", () => { - const output = (config, provider) => { - switch (provider) { - case "rs": - return _.cloneDeep(config.output.rs); - case "bq": - return _.cloneDeep(config.output.bq); - case "postgres": - return _.cloneDeep(config.output.postgres); - case "snowflake": - return _.cloneDeep(config.output.snowflake); - default: - return _.cloneDeep(config.output.default); - } - } - - const testCases = [ - { - eventType: "aliases", - }, - { - eventType: "groups", - }, - { - eventType: "identifies", - }, - { - eventType: "pages", - }, - { - eventType: "screens", - }, - { - eventType: "tracks", - }, - { - eventType: "extract", - }, - ]; - - for (const testCase of testCases) { - transformers.forEach((transformer, index) => { - it(`new ${testCase.eventType} for ${integrations[index]}`, () => { - const config = require("./data/warehouse/integrations/jsonpaths/new/" + testCase.eventType); - const input = _.cloneDeep(config.input); - const received = transformer.process(input); - expect(received).toEqual(output(config, integrations[index])); - }) - - it(`legacy ${testCase.eventType} for ${integrations[index]}`, () => { - const config = require("./data/warehouse/integrations/jsonpaths/legacy/" + testCase.eventType); - const input = _.cloneDeep(config.input); - const received = transformer.process(input); - expect(received).toEqual(output(config, integrations[index])); - }) - }); - } - }); }); describe("validTimestamp", () => { diff --git a/test/integrations/destinations/bqstream/router/data.ts b/test/integrations/destinations/bqstream/router/data.ts index d8167e31f7..0886b868b1 100644 --- a/test/integrations/destinations/bqstream/router/data.ts +++ b/test/integrations/destinations/bqstream/router/data.ts @@ -13,14 +13,63 @@ export const data = [ message: { type: 'track', 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: { count: 10, productId: 10, productName: 'Product-10', }, + 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', }, metadata: { jobId: 1, @@ -36,7 +85,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -45,12 +94,63 @@ export const data = [ message: { type: 'track', 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: { count: 20, productId: 20, productName: 'Product-20', }, + 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', }, metadata: { jobId: 2, @@ -66,7 +166,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -75,13 +175,63 @@ export const data = [ 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', traits: { count: 20, productId: 20, productName: 'Product-20', }, + 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', }, metadata: { jobId: 3, @@ -97,7 +247,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -106,13 +256,63 @@ export const data = [ message: { type: 'track', 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: { count: 20, productId: 20, productName: 'Product-20', }, + 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', }, metadata: { jobId: 5, @@ -128,7 +328,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -137,13 +337,63 @@ export const data = [ message: { type: 'track', 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: { count: 20, productId: 20, productName: 'Product-20', }, + 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', }, metadata: { jobId: 6, @@ -159,7 +409,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -168,11 +418,61 @@ export const data = [ message: { type: 'track', 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', + 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', }, metadata: { - jobId: 7, + jobId: 6, userId: 'user124', }, destination: { @@ -185,7 +485,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -194,10 +494,61 @@ export const data = [ message: { type: 'track', 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', + 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', }, metadata: { - jobId: 8, + jobId: 7, userId: 'user125', }, destination: { @@ -210,7 +561,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -219,9 +570,9 @@ export const data = [ message: { type: 'identify', event: 'insert product', - + sentAt: '2021-09-08T11:10:45.466Z', userId: 'user12345', - + channel: 'web', context: { os: { Name: '', @@ -261,17 +612,24 @@ export const data = [ 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', traits: { count: 20, productId: 20, productName: 'Product-20', }, 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', }, metadata: { - jobId: 9, + jobId: 8, userId: 'user125', }, destination: { @@ -284,7 +642,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -342,7 +700,7 @@ export const data = [ eventDelivery: true, eventDeliveryTS: 1636965406397, }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -359,7 +717,7 @@ export const data = [ rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', tableId: 'gc_table', }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -398,6 +756,7 @@ export const data = [ productId: 20, productName: 'Product-20', }, + ], tableId: 'gc_table', }, @@ -411,7 +770,7 @@ export const data = [ rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', tableId: 'gc_table', }, - + Enabled: true, ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', Name: 'bqstream test', }, @@ -431,36 +790,36 @@ export const data = [ batched: false, destination: { Config: { - datasetId: 'gc_dataset', + datasetId: "gc_dataset", eventDelivery: true, eventDeliveryTS: 1636965406397, - insertId: 'productId', - projectId: 'gc-project-id', - rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', - tableId: 'gc_table', + insertId: "productId", + projectId: "gc-project-id", + rudderAccountId: "1z8LpaSAuFR9TPWL6fECZfjmRa-", + tableId: "gc_table", }, - - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', - Name: 'bqstream test', + Enabled: true, + ID: "1WXjIHpu7ETXgjfiGPW3kCUgZFR", + Name: "bqstream test", }, - error: 'Invalid payload for the destination', + error: "Invalid payload for the destination", metadata: [ { - jobId: 7, - userId: 'user124', + jobId: 6, + userId: "user124", }, { - jobId: 8, - userId: 'user125', + jobId: 7, + userId: "user125", }, ], statTags: { - destType: 'BQSTREAM', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'router', - implementation: 'native', - module: 'destination', + destType: "BQSTREAM", + errorCategory: "dataValidation", + errorType: "instrumentation", + feature: "router", + implementation: "native", + module: "destination", }, statusCode: 400, }, @@ -468,32 +827,32 @@ export const data = [ batched: false, destination: { Config: { - datasetId: 'gc_dataset', + datasetId: "gc_dataset", eventDelivery: true, eventDeliveryTS: 1636965406397, - insertId: 'productId', - projectId: 'gc-project-id', - rudderAccountId: '1z8LpaSAuFR9TPWL6fECZfjmRa-', - tableId: 'gc_table', + insertId: "productId", + projectId: "gc-project-id", + rudderAccountId: "1z8LpaSAuFR9TPWL6fECZfjmRa-", + tableId: "gc_table", }, - - ID: '1WXjIHpu7ETXgjfiGPW3kCUgZFR', - Name: 'bqstream test', + Enabled: true, + ID: "1WXjIHpu7ETXgjfiGPW3kCUgZFR", + Name: "bqstream test", }, - error: 'Message Type not supported: identify', + error: "Message Type not supported: identify", metadata: [ { - jobId: 9, - userId: 'user125', + jobId: 8, + userId: "user125", }, ], statTags: { - destType: 'BQSTREAM', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'router', - implementation: 'native', - module: 'destination', + destType: "BQSTREAM", + errorCategory: "dataValidation", + errorType: "instrumentation", + feature: "router", + implementation: "native", + module: "destination", }, statusCode: 400, }, diff --git a/test/integrations/destinations/kochava/processor/data.ts b/test/integrations/destinations/kochava/processor/data.ts deleted file mode 100644 index d17e9795ff..0000000000 --- a/test/integrations/destinations/kochava/processor/data.ts +++ /dev/null @@ -1,1404 +0,0 @@ -export const data = [ - { - name: 'kochava', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - metadata: { - destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', - }, - destination: { - Config: { apiKey: '' }, - DestinationDefinition: { - Config: { cdkEnabled: true }, - DisplayName: 'Kochava', - ID: '1WTpBSTiL3iAUHUdW7rHT4sawgU', - Name: 'KOCHAVA', - }, - Enabled: true, - ID: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', - Name: 'kochava test', - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Bad event. Original error: message type "identify" not supported for "kochava"', - metadata: { - destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', - }, - statTags: { - destType: 'KOCHAVA', - errorCategory: 'dataValidation', - destinationId: '1WTpIHpH7NTBgjeiUPW1kCUgZGI', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'cdkV1', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'kochava', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/lambda/processor/data.ts b/test/integrations/destinations/lambda/processor/data.ts deleted file mode 100644 index 540de25417..0000000000 --- a/test/integrations/destinations/lambda/processor/data.ts +++ /dev/null @@ -1,498 +0,0 @@ -export const data = [ - { - name: 'lambda', - description: 'Simple Identify call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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, - }, - 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' }, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lambda', - description: 'Destination config not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'destination.Config cannot be undefined', - 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, - }, - statTags: { - destType: 'LAMBDA', - errorCategory: 'dataValidation', - destinationId: '2CojwY2YqpiTqfBPrMAUN8orgHA', - workspaceId: '2ANaDOTAzxboCOF86FkRGMEJ5F7', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/lambda/router/data.ts b/test/integrations/destinations/lambda/router/data.ts deleted file mode 100644 index 37b13e4d2a..0000000000 --- a/test/integrations/destinations/lambda/router/data.ts +++ /dev/null @@ -1,38788 +0,0 @@ -export const data = [ - { - name: 'lambda', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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', - }, - }, - ], - destType: 'lambda', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/leanplum/processor/data.ts b/test/integrations/destinations/leanplum/processor/data.ts deleted file mode 100644 index 207918a864..0000000000 --- a/test/integrations/destinations/leanplum/processor/data.ts +++ /dev/null @@ -1,1708 +0,0 @@ -export const data = [ - { - name: 'leanplum', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from ["properties.name","event"]', - statTags: { - destType: 'LEANPLUM', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from ["properties.name","event"]', - statTags: { - destType: 'LEANPLUM', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'leanplum', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/leanplum/router/data.ts b/test/integrations/destinations/leanplum/router/data.ts deleted file mode 100644 index db75a7fdc4..0000000000 --- a/test/integrations/destinations/leanplum/router/data.ts +++ /dev/null @@ -1,370 +0,0 @@ -export const data = [ - { - name: 'leanplum', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - }, - ], - destType: 'leanplum', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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, - }, - }, - }, - ], - }, - }, - }, - }, - { - name: 'leanplum', - description: 'Test 1', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - }, - ], - destType: 'leanplum', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/lemnisk/processor/data.ts b/test/integrations/destinations/lemnisk/processor/data.ts deleted file mode 100644 index 9127e247c8..0000000000 --- a/test/integrations/destinations/lemnisk/processor/data.ts +++ /dev/null @@ -1,1088 +0,0 @@ -export const data = [ - { - name: 'lemnisk', - description: 'Error: Event Type is required ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'LEMNISK', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: 'Error: Pl Track: Invalid Configuration', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Configuration for Web Mode requires write key and region url', - statTags: { - destType: 'LEMNISK', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: 'Error: Invalid Configs for Diapi', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Configuration for Server Mode requires Api key, Pass Key and region url', - statTags: { - destType: 'LEMNISK', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: 'Diapi Platform: Track Call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: 'Error: Message type not supported', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type alias is not supported in Web Cloud Mode', - statTags: { - destType: 'LEMNISK', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: ' Page Call -> pl Platform ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: ' Identify Call -> pl Platform ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lemnisk', - description: ' Track Call -> pl Platform ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/lemnisk/router/data.ts b/test/integrations/destinations/lemnisk/router/data.ts deleted file mode 100644 index 1a1b84f180..0000000000 --- a/test/integrations/destinations/lemnisk/router/data.ts +++ /dev/null @@ -1,664 +0,0 @@ -export const data = [ - { - name: 'lemnisk', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - 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', - }, - }, - ], - destType: 'lemnisk', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - 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: { - destType: 'LEMNISK', - feature: 'router', - implementation: 'native', - module: 'destination', - 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/integrations/destinations/lytics/processor/data.ts b/test/integrations/destinations/lytics/processor/data.ts deleted file mode 100644 index e04b1aa413..0000000000 --- a/test/integrations/destinations/lytics/processor/data.ts +++ /dev/null @@ -1,1360 +0,0 @@ -export const data = [ - { - name: 'lytics', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, - destination: { - DestinationDefinition: { Config: { cdkEnabled: true } }, - Config: { apiKey: 'dummyApiKey', stream: 'default' }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Unknown error occurred. Original error: "type" is a required field and it must be a string', - metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, - statTags: { - destType: 'LYTICS', - errorCategory: 'transformation', - feature: 'processor', - implementation: 'cdkV1', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, - destination: { - DestinationDefinition: { Config: { cdkEnabled: true } }, - Config: { apiKey: 'dummyApiKey', stream: 'default' }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Bad event. Original error: message type "gone" not supported for "lytics"', - metadata: { destinationID: 'ewksfdgDFSdvzsdmwsdfvcxj' }, - statTags: { - destType: 'LYTICS', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'cdkV1', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'lytics', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/lytics/router/data.ts b/test/integrations/destinations/lytics/router/data.ts deleted file mode 100644 index 98aded20bf..0000000000 --- a/test/integrations/destinations/lytics/router/data.ts +++ /dev/null @@ -1,351 +0,0 @@ -export const data = [ - { - name: 'lytics', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - ], - destType: 'lytics', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/mailjet/processor/data.ts b/test/integrations/destinations/mailjet/processor/data.ts deleted file mode 100644 index 71e06dc14e..0000000000 --- a/test/integrations/destinations/mailjet/processor/data.ts +++ /dev/null @@ -1,229 +0,0 @@ -export const data = [ - { - name: 'mailjet', - description: 'No Message type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'MAILJET', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailjet', - description: 'Unsupported Type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type "trackuser" is not supported', - statTags: { - destType: 'MAILJET', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailjet', - description: 'MailJet identify call without an email', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from "email"', - statTags: { - destType: 'MAILJET', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailjet', - description: 'Mailjet identify call without batching', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' }], - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/mailjet/router/data.ts b/test/integrations/destinations/mailjet/router/data.ts deleted file mode 100644 index 85c96629ff..0000000000 --- a/test/integrations/destinations/mailjet/router/data.ts +++ /dev/null @@ -1,106 +0,0 @@ -export const data = [ - { - name: 'mailjet', - description: 'Test 0', - 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, - }, - 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, - }, - ], - batched: true, - statusCode: 200, - destination: { - Config: { - apiKey: 'dummyApiKey', - apiSecret: 'dummyApiSecret', - listId: '58578', - contactPropertiesMapping: [ - { - from: 'userCountry', - to: 'country', - }, - ], - }, - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/mailmodo/processor/data.ts b/test/integrations/destinations/mailmodo/processor/data.ts deleted file mode 100644 index 45a14e2a52..0000000000 --- a/test/integrations/destinations/mailmodo/processor/data.ts +++ /dev/null @@ -1,648 +0,0 @@ -export const data = [ - { - name: 'mailmodo', - description: 'Track call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Providing empty API Key', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'API Key is not present, Aborting event', - statTags: { - destType: 'MAILMODO', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Not providing event type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'MAILMODO', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Page call- not supported', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type page is not supported', - statTags: { - destType: 'MAILMODO', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Identify call- with empty listName', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Identify call- with listName', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Identify call- without email', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Missing required value from ["traits.email","context.traits.email","properties.email"]', - statTags: { - destType: 'MAILMODO', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Identify call- with user properties(address as an object)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'mailmodo', - description: 'Identify call- with user properties(address as a string)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/mailmodo/router/data.ts b/test/integrations/destinations/mailmodo/router/data.ts deleted file mode 100644 index c341259bbe..0000000000 --- a/test/integrations/destinations/mailmodo/router/data.ts +++ /dev/null @@ -1,294 +0,0 @@ -export const data = [ - { - name: 'mailmodo', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - ], - destType: 'mailmodo', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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: { - destType: 'MAILMODO', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'router', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - destination: { - Config: { - apiKey: 'dummyApiKey', - listName: '', - }, - Enabled: true, - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/marketo_static_list/processor/data.ts b/test/integrations/destinations/marketo_static_list/processor/data.ts deleted file mode 100644 index 51e4e87824..0000000000 --- a/test/integrations/destinations/marketo_static_list/processor/data.ts +++ /dev/null @@ -1,1194 +0,0 @@ -export const data = [ - { - name: 'marketo_static_list', - description: 'adding and removing users and getting staticListId from externalId', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 3421, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { - listData: { - 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' }, - externalId: [{ type: 'marketoStaticListId', id: 1234 }], - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'DELETE', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=4&id=5&id=6', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'marketo_static_list', - description: 'adding more than max limit users', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { - listData: { - add: [ - { id: 0 }, - { id: 1 }, - { id: 2 }, - { id: 3 }, - { id: 4 }, - { id: 5 }, - { id: 6 }, - { id: 7 }, - { id: 8 }, - { id: 9 }, - { id: 10 }, - { id: 11 }, - { id: 12 }, - { id: 13 }, - { id: 14 }, - { id: 15 }, - { id: 16 }, - { id: 17 }, - { id: 18 }, - { id: 19 }, - { id: 20 }, - { id: 21 }, - { id: 22 }, - { id: 23 }, - { id: 24 }, - { id: 25 }, - { id: 26 }, - { id: 27 }, - { id: 28 }, - { id: 29 }, - { id: 30 }, - { id: 31 }, - { id: 32 }, - { id: 33 }, - { id: 34 }, - { id: 35 }, - { id: 36 }, - { id: 37 }, - { id: 38 }, - { id: 39 }, - { id: 40 }, - { id: 41 }, - { id: 42 }, - { id: 43 }, - { id: 44 }, - { id: 45 }, - { id: 46 }, - { id: 47 }, - { id: 48 }, - { id: 49 }, - { id: 50 }, - { id: 51 }, - { id: 52 }, - { id: 53 }, - { id: 54 }, - { id: 55 }, - { id: 56 }, - { id: 57 }, - { id: 58 }, - { id: 59 }, - { id: 60 }, - { id: 61 }, - { id: 62 }, - { id: 63 }, - { id: 64 }, - { id: 65 }, - { id: 66 }, - { id: 67 }, - { id: 68 }, - { id: 69 }, - { id: 70 }, - { id: 71 }, - { id: 72 }, - { id: 73 }, - { id: 74 }, - { id: 75 }, - { id: 76 }, - { id: 77 }, - { id: 78 }, - { id: 79 }, - { id: 80 }, - { id: 81 }, - { id: 82 }, - { id: 83 }, - { id: 84 }, - { id: 85 }, - { id: 86 }, - { id: 87 }, - { id: 88 }, - { id: 89 }, - { id: 90 }, - { id: 91 }, - { id: 92 }, - { id: 93 }, - { id: 94 }, - { id: 95 }, - { id: 96 }, - { id: 97 }, - { id: 98 }, - { id: 99 }, - { id: 100 }, - { id: 101 }, - { id: 102 }, - { id: 103 }, - { id: 104 }, - { id: 105 }, - { id: 106 }, - { id: 107 }, - { id: 108 }, - { id: 109 }, - { id: 110 }, - { id: 111 }, - { id: 112 }, - { id: 113 }, - { id: 114 }, - { id: 115 }, - { id: 116 }, - { id: 117 }, - { id: 118 }, - { id: 119 }, - { id: 120 }, - { id: 121 }, - { id: 122 }, - { id: 123 }, - { id: 124 }, - { id: 125 }, - { id: 126 }, - { id: 127 }, - { id: 128 }, - { id: 129 }, - { id: 130 }, - { id: 131 }, - { id: 132 }, - { id: 133 }, - { id: 134 }, - { id: 135 }, - { id: 136 }, - { id: 137 }, - { id: 138 }, - { id: 139 }, - { id: 140 }, - { id: 141 }, - { id: 142 }, - { id: 143 }, - { id: 144 }, - { id: 145 }, - { id: 146 }, - { id: 147 }, - { id: 148 }, - { id: 149 }, - { id: 150 }, - { id: 151 }, - { id: 152 }, - { id: 153 }, - { id: 154 }, - { id: 155 }, - { id: 156 }, - { id: 157 }, - { id: 158 }, - { id: 159 }, - { id: 160 }, - { id: 161 }, - { id: 162 }, - { id: 163 }, - { id: 164 }, - { id: 165 }, - { id: 166 }, - { id: 167 }, - { id: 168 }, - { id: 169 }, - { id: 170 }, - { id: 171 }, - { id: 172 }, - { id: 173 }, - { id: 174 }, - { id: 175 }, - { id: 176 }, - { id: 177 }, - { id: 178 }, - { id: 179 }, - { id: 180 }, - { id: 181 }, - { id: 182 }, - { id: 183 }, - { id: 184 }, - { id: 185 }, - { id: 186 }, - { id: 187 }, - { id: 188 }, - { id: 189 }, - { id: 190 }, - { id: 191 }, - { id: 192 }, - { id: 193 }, - { id: 194 }, - { id: 195 }, - { id: 196 }, - { id: 197 }, - { id: 198 }, - { id: 199 }, - { id: 200 }, - { id: 201 }, - { id: 202 }, - { id: 203 }, - { id: 204 }, - { id: 205 }, - { id: 206 }, - { id: 207 }, - { id: 208 }, - { id: 209 }, - { id: 210 }, - { id: 211 }, - { id: 212 }, - { id: 213 }, - { id: 214 }, - { id: 215 }, - { id: 216 }, - { id: 217 }, - { id: 218 }, - { id: 219 }, - { id: 220 }, - { id: 221 }, - { id: 222 }, - { id: 223 }, - { id: 224 }, - { id: 225 }, - { id: 226 }, - { id: 227 }, - { id: 228 }, - { id: 229 }, - { id: 230 }, - { id: 231 }, - { id: 232 }, - { id: 233 }, - { id: 234 }, - { id: 235 }, - { id: 236 }, - { id: 237 }, - { id: 238 }, - { id: 239 }, - { id: 240 }, - { id: 241 }, - { id: 242 }, - { id: 243 }, - { id: 244 }, - { id: 245 }, - { id: 246 }, - { id: 247 }, - { id: 248 }, - { id: 249 }, - { id: 250 }, - { id: 251 }, - { id: 252 }, - { id: 253 }, - { id: 254 }, - { id: 255 }, - { id: 256 }, - { id: 257 }, - { id: 258 }, - { id: 259 }, - { id: 260 }, - { id: 261 }, - { id: 262 }, - { id: 263 }, - { id: 264 }, - { id: 265 }, - { id: 266 }, - { id: 267 }, - { id: 268 }, - { id: 269 }, - { id: 270 }, - { id: 271 }, - { id: 272 }, - { id: 273 }, - { id: 274 }, - { id: 275 }, - { id: 276 }, - { id: 277 }, - { id: 278 }, - { id: 279 }, - { id: 280 }, - { id: 281 }, - { id: 282 }, - { id: 283 }, - { id: 284 }, - { id: 285 }, - { id: 286 }, - { id: 287 }, - { id: 288 }, - { id: 289 }, - { id: 290 }, - { id: 291 }, - { id: 292 }, - { id: 293 }, - { id: 294 }, - { id: 295 }, - { id: 296 }, - { id: 297 }, - { id: 298 }, - { id: 299 }, - { id: 300 }, - { id: 301 }, - { id: 302 }, - { id: 303 }, - { id: 304 }, - { id: 305 }, - { id: 306 }, - { id: 307 }, - { id: 308 }, - { id: 309 }, - { id: 310 }, - { id: 311 }, - { id: 312 }, - { id: 313 }, - { id: 314 }, - { id: 315 }, - { id: 316 }, - { id: 317 }, - { id: 318 }, - { id: 319 }, - { id: 320 }, - { id: 321 }, - { id: 322 }, - { id: 323 }, - { id: 324 }, - { id: 325 }, - { id: 326 }, - { id: 327 }, - { id: 328 }, - { id: 329 }, - { id: 330 }, - { id: 331 }, - { id: 332 }, - { id: 333 }, - { id: 334 }, - { id: 335 }, - { id: 336 }, - { id: 337 }, - { id: 338 }, - { id: 339 }, - { id: 340 }, - { id: 341 }, - { id: 342 }, - { id: 343 }, - { id: 344 }, - { id: 345 }, - { id: 346 }, - { id: 347 }, - { id: 348 }, - { id: 349 }, - { id: 350 }, - ], - }, - enablePartialFailure: true, - }, - context: { ip: '14.5.67.21', library: { name: 'http' } }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'marketo_static_list', - description: 'removing more than max limit users', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { - listData: { - remove: [ - { 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' } }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'DELETE', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'DELETE', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'marketo_static_list', - description: 'unsupported message Type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'track', - properties: { listData: { remove: [1] }, enablePartialFailure: true }, - context: { ip: '14.5.67.21', library: { name: 'http' } }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type track is not supported', - statTags: { - destType: 'MARKETO_STATIC_LIST', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'marketo_static_list', - description: 'Invalid leadIds format ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { listData: { remove: 1 }, enablePartialFailure: true }, - context: { ip: '14.5.67.21', library: { name: 'http' } }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Invalid leadIds format or no leadIds found neither to add nor to remove', - statTags: { - destType: 'MARKETO_STATIC_LIST', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'marketo_static_list', - description: 'Only adding with remove not an array', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { listData: { add: [{ id: 1 }], remove: 2 }, enablePartialFailure: true }, - context: { ip: '14.5.67.21', library: { name: 'http' } }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { JSON: {}, JSON_ARRAY: {}, XML: {}, FORM: {} }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/marketo_static_list/router/data.ts b/test/integrations/destinations/marketo_static_list/router/data.ts deleted file mode 100644 index 23b2ea8ea3..0000000000 --- a/test/integrations/destinations/marketo_static_list/router/data.ts +++ /dev/null @@ -1,1416 +0,0 @@ -export const data = [ - { - name: 'marketo_static_list', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { - listData: { - 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', - }, - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - metadata: { - jobId: 1, - }, - }, - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'audiencelist', - properties: { - listData: { - add: [ - { - id: 0, - }, - { - id: 1, - }, - { - id: 2, - }, - { - id: 3, - }, - { - id: 4, - }, - { - id: 5, - }, - { - id: 6, - }, - { - id: 7, - }, - { - id: 8, - }, - { - id: 9, - }, - { - id: 10, - }, - { - id: 11, - }, - { - id: 12, - }, - { - id: 13, - }, - { - id: 14, - }, - { - id: 15, - }, - { - id: 16, - }, - { - id: 17, - }, - { - id: 18, - }, - { - id: 19, - }, - { - id: 20, - }, - { - id: 21, - }, - { - id: 22, - }, - { - id: 23, - }, - { - id: 24, - }, - { - id: 25, - }, - { - id: 26, - }, - { - id: 27, - }, - { - id: 28, - }, - { - id: 29, - }, - { - id: 30, - }, - { - id: 31, - }, - { - id: 32, - }, - { - id: 33, - }, - { - id: 34, - }, - { - id: 35, - }, - { - id: 36, - }, - { - id: 37, - }, - { - id: 38, - }, - { - id: 39, - }, - { - id: 40, - }, - { - id: 41, - }, - { - id: 42, - }, - { - id: 43, - }, - { - id: 44, - }, - { - id: 45, - }, - { - id: 46, - }, - { - id: 47, - }, - { - id: 48, - }, - { - id: 49, - }, - { - id: 50, - }, - { - id: 51, - }, - { - id: 52, - }, - { - id: 53, - }, - { - id: 54, - }, - { - id: 55, - }, - { - id: 56, - }, - { - id: 57, - }, - { - id: 58, - }, - { - id: 59, - }, - { - id: 60, - }, - { - id: 61, - }, - { - id: 62, - }, - { - id: 63, - }, - { - id: 64, - }, - { - id: 65, - }, - { - id: 66, - }, - { - id: 67, - }, - { - id: 68, - }, - { - id: 69, - }, - { - id: 70, - }, - { - id: 71, - }, - { - id: 72, - }, - { - id: 73, - }, - { - id: 74, - }, - { - id: 75, - }, - { - id: 76, - }, - { - id: 77, - }, - { - id: 78, - }, - { - id: 79, - }, - { - id: 80, - }, - { - id: 81, - }, - { - id: 82, - }, - { - id: 83, - }, - { - id: 84, - }, - { - id: 85, - }, - { - id: 86, - }, - { - id: 87, - }, - { - id: 88, - }, - { - id: 89, - }, - { - id: 90, - }, - { - id: 91, - }, - { - id: 92, - }, - { - id: 93, - }, - { - id: 94, - }, - { - id: 95, - }, - { - id: 96, - }, - { - id: 97, - }, - { - id: 98, - }, - { - id: 99, - }, - { - id: 100, - }, - { - id: 101, - }, - { - id: 102, - }, - { - id: 103, - }, - { - id: 104, - }, - { - id: 105, - }, - { - id: 106, - }, - { - id: 107, - }, - { - id: 108, - }, - { - id: 109, - }, - { - id: 110, - }, - { - id: 111, - }, - { - id: 112, - }, - { - id: 113, - }, - { - id: 114, - }, - { - id: 115, - }, - { - id: 116, - }, - { - id: 117, - }, - { - id: 118, - }, - { - id: 119, - }, - { - id: 120, - }, - { - id: 121, - }, - { - id: 122, - }, - { - id: 123, - }, - { - id: 124, - }, - { - id: 125, - }, - { - id: 126, - }, - { - id: 127, - }, - { - id: 128, - }, - { - id: 129, - }, - { - id: 130, - }, - { - id: 131, - }, - { - id: 132, - }, - { - id: 133, - }, - { - id: 134, - }, - { - id: 135, - }, - { - id: 136, - }, - { - id: 137, - }, - { - id: 138, - }, - { - id: 139, - }, - { - id: 140, - }, - { - id: 141, - }, - { - id: 142, - }, - { - id: 143, - }, - { - id: 144, - }, - { - id: 145, - }, - { - id: 146, - }, - { - id: 147, - }, - { - id: 148, - }, - { - id: 149, - }, - { - id: 150, - }, - { - id: 151, - }, - { - id: 152, - }, - { - id: 153, - }, - { - id: 154, - }, - { - id: 155, - }, - { - id: 156, - }, - { - id: 157, - }, - { - id: 158, - }, - { - id: 159, - }, - { - id: 160, - }, - { - id: 161, - }, - { - id: 162, - }, - { - id: 163, - }, - { - id: 164, - }, - { - id: 165, - }, - { - id: 166, - }, - { - id: 167, - }, - { - id: 168, - }, - { - id: 169, - }, - { - id: 170, - }, - { - id: 171, - }, - { - id: 172, - }, - { - id: 173, - }, - { - id: 174, - }, - { - id: 175, - }, - { - id: 176, - }, - { - id: 177, - }, - { - id: 178, - }, - { - id: 179, - }, - { - id: 180, - }, - { - id: 181, - }, - { - id: 182, - }, - { - id: 183, - }, - { - id: 184, - }, - { - id: 185, - }, - { - id: 186, - }, - { - id: 187, - }, - { - id: 188, - }, - { - id: 189, - }, - { - id: 190, - }, - { - id: 191, - }, - { - id: 192, - }, - { - id: 193, - }, - { - id: 194, - }, - { - id: 195, - }, - { - id: 196, - }, - { - id: 197, - }, - { - id: 198, - }, - { - id: 199, - }, - { - id: 200, - }, - { - id: 201, - }, - { - id: 202, - }, - { - id: 203, - }, - { - id: 204, - }, - { - id: 205, - }, - { - id: 206, - }, - { - id: 207, - }, - { - id: 208, - }, - { - id: 209, - }, - { - id: 210, - }, - { - id: 211, - }, - { - id: 212, - }, - { - id: 213, - }, - { - id: 214, - }, - { - id: 215, - }, - { - id: 216, - }, - { - id: 217, - }, - { - id: 218, - }, - { - id: 219, - }, - { - id: 220, - }, - { - id: 221, - }, - { - id: 222, - }, - { - id: 223, - }, - { - id: 224, - }, - { - id: 225, - }, - { - id: 226, - }, - { - id: 227, - }, - { - id: 228, - }, - { - id: 229, - }, - { - id: 230, - }, - { - id: 231, - }, - { - id: 232, - }, - { - id: 233, - }, - { - id: 234, - }, - { - id: 235, - }, - { - id: 236, - }, - { - id: 237, - }, - { - id: 238, - }, - { - id: 239, - }, - { - id: 240, - }, - { - id: 241, - }, - { - id: 242, - }, - { - id: 243, - }, - { - id: 244, - }, - { - id: 245, - }, - { - id: 246, - }, - { - id: 247, - }, - { - id: 248, - }, - { - id: 249, - }, - { - id: 250, - }, - { - id: 251, - }, - { - id: 252, - }, - { - id: 253, - }, - { - id: 254, - }, - { - id: 255, - }, - { - id: 256, - }, - { - id: 257, - }, - { - id: 258, - }, - { - id: 259, - }, - { - id: 260, - }, - { - id: 261, - }, - { - id: 262, - }, - { - id: 263, - }, - { - id: 264, - }, - { - id: 265, - }, - { - id: 266, - }, - { - id: 267, - }, - { - id: 268, - }, - { - id: 269, - }, - { - id: 270, - }, - { - id: 271, - }, - { - id: 272, - }, - { - id: 273, - }, - { - id: 274, - }, - { - id: 275, - }, - { - id: 276, - }, - { - id: 277, - }, - { - id: 278, - }, - { - id: 279, - }, - { - id: 280, - }, - { - id: 281, - }, - { - id: 282, - }, - { - id: 283, - }, - { - id: 284, - }, - { - id: 285, - }, - { - id: 286, - }, - { - id: 287, - }, - { - id: 288, - }, - { - id: 289, - }, - { - id: 290, - }, - { - id: 291, - }, - { - id: 292, - }, - { - id: 293, - }, - { - id: 294, - }, - { - id: 295, - }, - { - id: 296, - }, - { - id: 297, - }, - { - id: 298, - }, - { - id: 299, - }, - { - id: 300, - }, - { - id: 301, - }, - { - id: 302, - }, - { - id: 303, - }, - { - id: 304, - }, - { - id: 305, - }, - { - id: 306, - }, - { - id: 307, - }, - { - id: 308, - }, - { - id: 309, - }, - { - id: 310, - }, - { - id: 311, - }, - { - id: 312, - }, - { - id: 313, - }, - { - id: 314, - }, - { - id: 315, - }, - { - id: 316, - }, - { - id: 317, - }, - { - id: 318, - }, - { - id: 319, - }, - { - id: 320, - }, - { - id: 321, - }, - { - id: 322, - }, - { - id: 323, - }, - { - id: 324, - }, - { - id: 325, - }, - { - id: 326, - }, - { - id: 327, - }, - { - id: 328, - }, - { - id: 329, - }, - { - id: 330, - }, - { - id: 331, - }, - { - id: 332, - }, - { - id: 333, - }, - { - id: 334, - }, - { - id: 335, - }, - { - id: 336, - }, - { - id: 337, - }, - { - id: 338, - }, - { - id: 339, - }, - { - id: 340, - }, - { - id: 341, - }, - { - id: 342, - }, - { - id: 343, - }, - { - id: 344, - }, - { - id: 345, - }, - { - id: 346, - }, - { - id: 347, - }, - { - id: 348, - }, - { - id: 349, - }, - { - id: 350, - }, - ], - }, - enablePartialFailure: true, - }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - metadata: { - jobId: 2, - }, - }, - { - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - event: 'event1', - type: 'track', - properties: { - listData: { - remove: [1], - }, - enablePartialFailure: true, - }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - metadata: { - jobId: 3, - }, - }, - ], - destType: 'marketo_static_list', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - batchedRequest: [ - { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - { - version: '1', - type: 'REST', - method: 'DELETE', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=4&id=5&id=6', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - ], - metadata: [ - { - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - jobId: 1, - }, - ], - batched: false, - statusCode: 200, - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - }, - { - batchedRequest: [ - { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - { - version: '1', - type: 'REST', - method: 'POST', - endpoint: - 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350', - headers: { - Authorization: 'Bearer access_token_success', - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - ], - metadata: [ - { - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - jobId: 2, - }, - ], - batched: false, - statusCode: 200, - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - }, - { - metadata: [ - { - destInfo: { - authKey: '1zia9wKshXt80YksLmUdJnr7IHI', - }, - jobId: 3, - }, - ], - destination: { - ID: '1zia9wKshXt80YksLmUdJnr7IHI', - Name: 'test_marketo', - DestinationDefinition: { - ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6', - Name: 'MARKETO', - DisplayName: 'Marketo', - transformAt: 'processor', - transformAtV1: 'processor', - }, - Config: { - clientId: 'marketo_client_id_success', - clientSecret: 'marketo_client_secret_success', - accountId: 'marketo_acct_id_success', - staticListId: 1234, - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - batched: false, - statusCode: 400, - error: 'Event type track is not supported', - statTags: { - errorCategory: 'dataValidation', - errorType: 'instrumentation', - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/moengage/processor/data.ts b/test/integrations/destinations/moengage/processor/data.ts deleted file mode 100644 index 50b0361381..0000000000 --- a/test/integrations/destinations/moengage/processor/data.ts +++ /dev/null @@ -1,2780 +0,0 @@ -export const data = [ - { - name: 'moengage', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'The region is not valid', - statTags: { - destType: 'MOENGAGE', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'MOENGAGE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type gone is not supported', - statTags: { - destType: 'MOENGAGE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 14', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'moengage', - description: 'Test 15', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from "previousId"', - statTags: { - destType: 'MOENGAGE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/moengage/router/data.ts b/test/integrations/destinations/moengage/router/data.ts deleted file mode 100644 index a5664906e5..0000000000 --- a/test/integrations/destinations/moengage/router/data.ts +++ /dev/null @@ -1,480 +0,0 @@ -export const data = [ - { - name: 'moengage', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - ], - destType: 'moengage', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/monetate/processor/data.ts b/test/integrations/destinations/monetate/processor/data.ts deleted file mode 100644 index 2202ab2b25..0000000000 --- a/test/integrations/destinations/monetate/processor/data.ts +++ /dev/null @@ -1,2796 +0,0 @@ -export const data = [ - { - name: 'monetate', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: "'product_id' is a required field for Product Viewed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type identify is not supported', - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Cart Viewed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 14', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 15', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 16', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 17', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 18', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 19', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 20', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 21', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type identify is not supported', - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 22', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 23', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 24', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - "'quantity', 'price' and 'product_id' are required fields and 'quantity' and 'price' should be a number for all products for Order Completed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 25', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 26', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - "'product_id', 'quantity', 'cart_value' are required fields and 'quantity' should be a number for Product Added", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 27', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: "'product_id' is a required field for all products for Product List Viewed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 28', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: "'product_id' is a required field for Product Viewed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'monetate', - description: 'Test 29', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: "'products' missing or not array in Product List Viewed", - statTags: { - destType: 'MONETATE', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/monetate/router/data.ts b/test/integrations/destinations/monetate/router/data.ts deleted file mode 100644 index 09a7f8073d..0000000000 --- a/test/integrations/destinations/monetate/router/data.ts +++ /dev/null @@ -1,264 +0,0 @@ -export const data = [ - { - name: 'monetate', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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', - }, - }, - }, - ], - destType: 'monetate', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/ometria/processor/data.ts b/test/integrations/destinations/ometria/processor/data.ts deleted file mode 100644 index c28854c9fd..0000000000 --- a/test/integrations/destinations/ometria/processor/data.ts +++ /dev/null @@ -1,1078 +0,0 @@ -export const data = [ - { - name: 'ometria', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'ometria', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/ometria/router/data.ts b/test/integrations/destinations/ometria/router/data.ts deleted file mode 100644 index ef15eea586..0000000000 --- a/test/integrations/destinations/ometria/router/data.ts +++ /dev/null @@ -1,336 +0,0 @@ -export const data = [ - { - name: 'ometria', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - ], - destType: 'ometria', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/one_signal/processor/data.ts b/test/integrations/destinations/one_signal/processor/data.ts deleted file mode 100644 index 7f244aa711..0000000000 --- a/test/integrations/destinations/one_signal/processor/data.ts +++ /dev/null @@ -1,1545 +0,0 @@ -export const data = [ - { - name: 'one_signal', - description: - 'Identify call for creating new device (phone and playerId is not available in the payload). Integrations object is also not available.', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - { - 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: 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - 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.', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - { - 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: 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: {}, - userId: '', - }, - statusCode: 200, - }, - { - 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: 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: - 'Identify call for creating a new device(deviceType and identifier is present in the integrations object, playerId not present)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: - 'Identify call for creating a new device(channel is mobile and integrations object is not present, playerId not present)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Identify call for Editing a device using playerId', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Track call for updating tags using external_user_id', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: - 'Track call for updating tags using external_user_id (with concatenated event name)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: - 'Track call with tags key having empty value( Output Behaviour: Those keys will be deleted)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Track call having no allowed properties)', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Group call ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Check for appId', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'appId is a required field', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Check for message type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Message type page is not supported', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Validating deviceType', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'device_type 15 is not a valid device_type', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'check for Message type not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Check for event name in the track call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event is not present in the input payloads', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Check for groupId ', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'groupId is required for group events', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'one_signal', - description: 'Check for user Id (required field to update the device) for track call', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'userId is required for track events/updating a device', - statTags: { - destType: 'ONE_SIGNAL', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/one_signal/router/data.ts b/test/integrations/destinations/one_signal/router/data.ts deleted file mode 100644 index 5f45d2e624..0000000000 --- a/test/integrations/destinations/one_signal/router/data.ts +++ /dev/null @@ -1,286 +0,0 @@ -export const data = [ - { - name: 'one_signal', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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', - }, - }, - ], - destType: 'one_signal', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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/integrations/destinations/pagerduty/processor/data.ts b/test/integrations/destinations/pagerduty/processor/data.ts deleted file mode 100644 index 97fe22daa0..0000000000 --- a/test/integrations/destinations/pagerduty/processor/data.ts +++ /dev/null @@ -1,782 +0,0 @@ -export const data = [ - { - name: 'pagerduty', - description: 'No Message type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Routing Key is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Routing Key Is Required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Unsupported Event type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type alias is not supported', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'event name is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: {}, - }, - destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event name is required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Parameter source is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from "properties.source"', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'dedup_key is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'dedup_key required for resolve events', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Timestamp older then 90 days', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Events must be sent within ninety days of their occurrence', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Trigger event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Acknowledge event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Resolve event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Change event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/pagerduty/router/data.ts b/test/integrations/destinations/pagerduty/router/data.ts deleted file mode 100644 index 02fd53c629..0000000000 --- a/test/integrations/destinations/pagerduty/router/data.ts +++ /dev/null @@ -1,309 +0,0 @@ -export const data = [ - { - name: 'pagerduty', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - 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', - }, - }, - }, - ], - destType: 'pagerduty', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - 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: { - destType: 'PAGERDUTY', - feature: 'router', - module: 'destination', - implementation: 'native', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/pardot/router/data.ts b/test/integrations/destinations/pardot/router/data.ts deleted file mode 100644 index 28680deafc..0000000000 --- a/test/integrations/destinations/pardot/router/data.ts +++ /dev/null @@ -1,1017 +0,0 @@ -export const data = [ - { - name: 'pardot', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - 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, - }, - }, - }, - ], - destType: 'pardot', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - 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: { - destType: 'PARDOT', - feature: 'router', - implementation: 'native', - errorCategory: 'platform', - module: 'destination', - errorType: 'oAuthSecret', - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/personalize/processor/data.ts b/test/integrations/destinations/personalize/processor/data.ts deleted file mode 100644 index 012aae25bb..0000000000 --- a/test/integrations/destinations/personalize/processor/data.ts +++ /dev/null @@ -1,4188 +0,0 @@ -export const data = [ - { - name: 'personalize', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - destinationType: 'PERSONALIZE', - jobId: 1, - messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', - messageIds: null, - receivedAt: '2021-03-13T01:56:44.340+05:30', - rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', - sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', - }, - output: { - 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' }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - payload: { - datasetArn: - 'arn:aws:personalize:us-east-1:454531037350:dataset/putTest_DataSetGroup/USERS', - users: [ - { - userId: '123456', - properties: { typeOfMovie: 'art film', numberOfRatings: '13' }, - }, - ], - }, - choice: 'PutUsers', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 14', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 15', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Mapped property typeOfMovie not found', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 16', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Either Dataset ARN is not correctly entered or invalid', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 17', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Dataset ARN is a mandatory information to use putItems', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 18', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'PutUsers is not supported for Track Calls', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 19', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Tracking Id is a mandatory information to use putEvents', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 20', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'itemId is a mandatory property for using PutItems', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 21', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Cannot process if no event name specified', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 22', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'This Message Type does not support PutItems. Aborting message', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 23', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Dataset ARN is a mandatory information to use putUsers', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 24', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Either Dataset ARN is not correctly entered or invalid', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 25', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Mapped property numberOfRatings not found', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 26', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type screen is not supported', - 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', - }, - statTags: { - destType: 'PERSONALIZE', - errorCategory: 'dataValidation', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 27', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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' }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 28', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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' }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 29', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - 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', - }, - output: { - 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' }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'personalize', - description: 'Test 30', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - 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: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { - sourceId: '1pe7ty3hMMQCnrfZ0Mn2QG48884', - destinationId: '1pe9WgFOuFHOSIfmUkkhVTD1Rsd', - jobId: 1, - destinationType: 'PERSONALIZE', - messageId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', - messageIds: null, - rudderId: 'daf823fb-e8d3-413a-8313-d34cd756f968', - }, - output: { - sessionId: '4bb69e26-b5a6-446a-a140-dbb6263369c9', - trackingId: 'c60', - userId: '', - 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' }, - }, - ], - }, - statusCode: 200, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/pinterest_tag/processor/data.ts b/test/integrations/destinations/pinterest_tag/processor/data.ts deleted file mode 100644 index 344d4ff507..0000000000 --- a/test/integrations/destinations/pinterest_tag/processor/data.ts +++ /dev/null @@ -1,3435 +0,0 @@ -export const data = [ - { - name: 'pinterest_tag', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - gender: 'non-binary', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsTestEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: { test: true }, - body: { - JSON: { - action_source: 'web', - event_name: 'watch_video', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - ge: ['1b16b1df538ba12dc3f97edbb85caa7050d46c148134290feba80f8236c83db9'], - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Order completed', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'checkout', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'product added', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - product_id: '123', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - price: 25, - quantity: 2, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'add_to_cart', - action_source: 'web', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 2, - content_ids: ['123'], - contents: [{ quantity: 2, item_price: '25' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Product List Filtered', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - destinationDefinition: { Config: { cdkV2Enabled: true } }, - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Advertiser Id not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Advertiser Id not found. Aborting', - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Product List Filtered', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - error: - 'It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent: Workflow: procWorkflow, Step: validateUserFields, ChildStep: undefined, OriginalError: It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'watch_video', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - num_items: 2, - order_id: '50314b8e9bcf000000000000', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Advertiser Id not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Advertiser Id not found. Aborting', - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'group', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - enhancedMatch: true, - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - channel: 'abc', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - error: - 'Action source must be one of app_android, app_ios, web, offline: Workflow: procWorkflow, Step: validateCommonFields, ChildStep: undefined, OriginalError: Action source must be one of app_android, app_ios, web, offline', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - action_source: 'web', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - num_items: 2, - order_id: '50314b8e9bcf000000000000', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'page_visit', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - device: { advertisingId: 'abc123', adTrackingEnabled: true }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - opt_out: false, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - ip: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - device: { adTrackingEnabled: false }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - opt_out: true, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - client_ip_address: '127.0.0.0', - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 14', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - requestIP: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: 'Hashed phone', - gender: 'Hashed Gender', - dob: 'Hashed DB', - lastname: 'Hashed Lastname', - firstName: 'Hashed FirstName', - address: { - city: 'Hashed City', - state: 'Hashed State', - zip: 'Hashed Zip', - country: 'Hashed country', - }, - }, - device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: false, - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - action_source: 'web', - opt_out: true, - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - user_data: { - ph: ['Hashed phone'], - db: ['Hashed DB'], - ln: ['Hashed Lastname'], - fn: ['Hashed FirstName'], - ct: ['Hashed City'], - st: ['Hashed State'], - zp: ['Hashed Zip'], - country: ['Hashed country'], - hashed_maids: ['Hashed maids'], - ge: ['Hashed Gender'], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 15', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - requestIP: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: ['Hashed phone', 'Hashed phone1'], - gender: ['Hashed Gender', 'Hashed Gender1'], - dob: ['Hashed DB', 'Hashed DB1'], - lastname: ['Hashed Lastname', 'Hashed Lastname1'], - firstName: ['Hashed FirstName', 'Hashed FirstName1'], - address: { - city: ['Hashed City', 'Hashed City1'], - state: ['Hashed State', 'Hashed State1'], - zip: ['Hashed Zip', 'Hashed Zip1'], - country: ['Hashed country', 'Hashed country1'], - }, - }, - device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: false, - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - action_source: 'web', - opt_out: true, - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - user_data: { - ph: ['Hashed phone', 'Hashed phone1'], - db: ['Hashed DB', 'Hashed DB1'], - ln: ['Hashed Lastname', 'Hashed Lastname1'], - fn: ['Hashed FirstName', 'Hashed FirstName1'], - ct: ['Hashed City', 'Hashed City1'], - st: ['Hashed State', 'Hashed State1'], - zp: ['Hashed Zip', 'Hashed Zip1'], - country: ['Hashed country', 'Hashed country1'], - hashed_maids: ['Hashed maids'], - ge: ['Hashed Gender', 'Hashed Gender1'], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 16', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - name: 'Test Tool', - type: 'page', - sentAt: '2023-02-01T00:00:00.379Z', - userId: '', - channel: 'web', - context: { - os: { name: '', version: '' }, - app: { - name: 'RudderLabs JavaScript SDK', - version: '2.22.3', - namespace: 'com.rudderlabs.javascript', - }, - page: { - url: 'https://www.abc.com/s598907', - path: '/test-path/s598907', - title: 'Test Tool + Reviews | Rudderstack', - search: '', - tab_url: 'https://www.abc.com/s598907', - referrer: '$direct', - initial_referrer: '$direct', - referring_domain: '', - initial_referring_domain: '', - }, - locale: 'en-US', - screen: { - width: 1024, - height: 1024, - density: 1, - innerWidth: 1024, - innerHeight: 1024, - }, - traits: {}, - library: { name: 'RudderLabs JavaScript SDK', version: '2.22.3' }, - campaign: {}, - doNotSell: false, - sessionId: 1675209600203, - userAgent: - 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', - gaClientId: { - integrations: { - 'Google Ads': { gclid: '' }, - 'Google Analytics': { clientId: '1518934611.1234569600' }, - }, - }, - sessionStart: true, - }, - rudderId: '7291a10f-e7dd-49f9-94ce-0154f53897y6', - messageId: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', - timestamp: '2023-02-01T12:47:30.030Z', - properties: { - sku: '45790-32', - url: 'https://www.abc.com/23rty', - name: 'Test Tool', - path: '/test-path/tool', - email: '', - title: 'Test Tool + Reviews | Rudderstack', - review: { reviewCount: 2, averageReview: 5, reviewContentID: ['238300132'] }, - search: '', - tab_url: 'https://www.abc/com', - pageInfo: { - pageId: 's592897', - category: { - pageType: 'product', - subCategory: 'Dining & Kitchen Furniture', - pageTemplate: 'product detail grouper', - primaryCategory: 'Furniture', - }, - brandType: 'new brand', - }, - referrer: '', - subCategory: 'Dining & Kitchen Furniture', - primaryCategory: 'Furniture', - initial_referrer: '$direct', - referring_domain: '', - initial_referring_domain: '', - }, - receivedAt: '2023-02-01T12:47:30.038Z', - request_ip: '66.249.72.218', - anonymousId: 'a61c77a6-1613-474a-aee8-e7e1a0971047', - integrations: { All: true }, - originalTimestamp: '2023-02-01T00:00:00.371Z', - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123478671210', - sendingUnHashedData: false, - enableDeduplication: false, - eventsMapping: [ - { from: 'Product Added', to: 'AddToCart' }, - { from: 'Order Completed', to: 'Checkout' }, - { from: 'Product Viewed', to: 'PageVisit' }, - { from: 'Lead', to: 'Lead' }, - { from: 'Signup', to: 'Signup' }, - ], - enhancedMatch: true, - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - body: { - JSON: { - event_time: 1675255650, - event_source_url: 'https://www.abc.com/s598907', - action_source: 'web', - app_name: 'RudderLabs JavaScript SDK', - app_version: '2.22.3', - language: 'en-US', - event_id: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', - advertiser_id: '123478671210', - user_data: { - client_ip_address: '66.249.72.218', - client_user_agent: - 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', - }, - event_name: 'page_visit', - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 17', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'test', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - sku: '1234', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 0, - content_ids: ['1234'], - contents: [{ quantity: 1, item_price: 'undefined' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 18', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - sku: '1234', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - 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', - }, - ], - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 1, - content_ids: ['507f1f77bcf86cd799439011'], - contents: [{ quantity: 1, item_price: '19' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 19', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - body: { - FORM: {}, - JSON: { - action_source: 'web', - advertiser_id: '123456', - app_id: '429047995', - custom_data: { - contents: [{ item_price: 'undefined', quantity: 1 }], - currency: 'USD', - num_items: 0, - order_id: '50314b8e9bcf000000000000', - value: '27.5', - }, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - event_name: 'custom event', - event_time: 1597383030, - user_data: { - client_user_agent: 'chrome', - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - }, - }, - JSON_ARRAY: {}, - XML: {}, - }, - endpoint: 'https://ct.pinterest.com/events/v3', - files: {}, - headers: { 'Content-Type': 'application/json' }, - method: 'POST', - params: {}, - type: 'REST', - version: '1', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 20', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Track call with v5 Api version and send external_id toggle enabled', - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendExternalId: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'watch_video', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - external_id: [ - '3217d71a74c219d6e31e28267b313a7ceb6a2c032db1a091c9416b25b2ae2bc8', - ], - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 21', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Custom event with v5 Api version', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 22', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: - 'Custom event with v5 Api version, with unhashed User Data and the values are an array of strings', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: ['abc@gmail.com', 'def@gmail.com'], - phone: ['+1234589947', '+1234589948'], - ge: ['male', 'male'], - db: ['19950715', '19970615'], - lastname: ['Rudderlabs', 'Xu'], - firstName: ['Test', 'Alex'], - address: { - city: ['Kolkata', 'Mumbai'], - state: ['WB', 'MH'], - zip: ['700114', '700115'], - country: ['IN', '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', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - price: 25, - quantity: 2, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: [ - '48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08', - 'c392e50ebeca7bea4405e9c545023451ac56620031f81263f681269bde14218b', - ], - ph: [ - 'd164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b', - '22bdde2594851294f2a6f4c34af704e68b398b03129ea9ceb58f0ffe33f6db52', - ], - ln: [ - 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251', - '9c2f138690fca4890c3c4a6691610fbbbdf32091cc001f7355cfdf574baa52b9', - ], - fn: [ - '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', - '4135aa9dc1b842a653dea846903ddb95bfb8c5a10c504a7fa16e10bc31d1fdf0', - ], - ct: [ - '6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85', - 'd209bcc17778fd19fd2bc0c99a3868bf011da5162d3a75037a605768ebc276e2', - ], - st: [ - '3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd', - '1b0316ed1cfed044035c55363e02ccafab26d66b1c2746b94d17285f043324aa', - ], - zp: [ - '1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c', - '4d6755aa1e85517191f06cc91448696c173e1195ae51f94a1670116ac7b5c47b', - ], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 23', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Ad Account Id check in V5', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: '', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Ad Account ID not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Ad Account ID not found. Aborting', - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 24', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Conversion Token check in V5', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: '', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'Conversion Token not found. Aborting: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: Conversion Token not found. Aborting', - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 25', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: false, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - metadata: { destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq' }, - error: - "custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting: Workflow: procWorkflow, Step: eventNames, ChildStep: undefined, OriginalError: custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting", - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'platform', - feature: 'processor', - implementation: 'cdkV2', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; diff --git a/test/integrations/destinations/pinterest_tag/router/data.ts b/test/integrations/destinations/pinterest_tag/router/data.ts deleted file mode 100644 index e004be25f0..0000000000 --- a/test/integrations/destinations/pinterest_tag/router/data.ts +++ /dev/null @@ -1,2153 +0,0 @@ -export const data = [ - { - destType: 'pinterest_tag', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 1, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'Order completed', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 2, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'product added', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - product_id: '123', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - price: 25, - quantity: 2, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 3, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'Product List Filtered', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 4, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'Identify', - event: 'User Signup', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'User Created', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 6, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - version: '1', - statusCode: 200, - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'WatchVideo', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['bdfdee6414a89d72bfbf5ee90b1f85924467bae1e3980d83c2cd348dc31d5819'], - fn: ['ee5db3fe0253b651aca3676692e0c59b25909304f5c51d223a02a215d104144b'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 7, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - destType: 'pinterest_tag', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { - 'Content-Type': 'application/json', - }, - params: {}, - body: { - JSON: { - data: [ - { - event_name: 'watch_video', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - opt_out_type: 'LDP', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'signup', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - opt_out_type: 'LDP', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'checkout', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'add_to_cart', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 2, - content_ids: ['123'], - contents: [ - { - quantity: 2, - item_price: '25', - }, - ], - }, - }, - { - event_name: 'search', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'signup', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - action_source: 'web', - event_name: 'WatchVideo', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['bdfdee6414a89d72bfbf5ee90b1f85924467bae1e3980d83c2cd348dc31d5819'], - fn: ['ee5db3fe0253b651aca3676692e0c59b25909304f5c51d223a02a215d104144b'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - 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, - }, - ], - batched: true, - statusCode: 200, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - ], - statTags: { - destType: 'PINTEREST_TAG', - feature: 'router', - implementation: 'cdkV2', - module: 'destination', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - }, - batched: false, - statusCode: 400, - error: 'message type identify is not supported', - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - }, - }, - }, - }, - { - destType: 'pinterest_tag', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 8, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'Order completed', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 9, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - { - message: { - type: 'track', - event: 'Test', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 10, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - destType: 'pinterest_tag', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - data: [ - { - event_name: 'watch_video', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - opt_out_type: 'LDP', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'signup', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - opt_out_type: 'LDP', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'checkout', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - { - event_name: 'custom', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { - quantity: 1, - item_price: '19', - }, - { - quantity: 2, - item_price: '3', - }, - ], - }, - }, - ], - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 8, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 9, - }, - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 10, - }, - ], - batched: true, - statusCode: 200, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - }, - }, - }, - }, - { - destType: 'pinterest_tag', - description: 'Test 0', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - message: { - type: 'Identify', - event: 'User Signup', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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', - }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { - All: true, - }, - }, - metadata: { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - destType: 'pinterest_tag', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - metadata: [ - { - destintionId: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - jobId: 5, - }, - ], - batched: false, - statusCode: 400, - error: 'message type identify is not supported', - statTags: { - destType: 'PINTEREST_TAG', - implementation: 'cdkV2', - feature: 'router', - module: 'destination', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - }, - destination: { - DestinationDefinition: { Config: { cdkV2Enabled: true } }, - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [ - { - 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', - }, - ], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - }, - }, - }, - }, -]; diff --git a/test/integrations/destinations/pinterest_tag/step/data.ts b/test/integrations/destinations/pinterest_tag/step/data.ts deleted file mode 100644 index b5d6f5186f..0000000000 --- a/test/integrations/destinations/pinterest_tag/step/data.ts +++ /dev/null @@ -1,3358 +0,0 @@ -export const data = [ - { - name: 'pinterest_tag', - description: 'Test 0', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - gender: 'non-binary', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'watch_video', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - ge: ['1b16b1df538ba12dc3f97edbb85caa7050d46c148134290feba80f8236c83db9'], - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 1', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Order completed', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'checkout', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 2', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'product added', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - product_id: '123', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - price: 25, - quantity: 2, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'add_to_cart', - action_source: 'web', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 2, - content_ids: ['123'], - contents: [{ quantity: 2, item_price: '25' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 3', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Product List Filtered', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Advertiser Id not found. Aborting', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 4', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'Product List Filtered', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - 'It is required at least one of em, hashed_maids or pair of client_ip_address and client_user_agent', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 5', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '429047995', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'watch_video', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - num_items: 2, - order_id: '50314b8e9bcf000000000000', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 6', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Advertiser Id not found. Aborting', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 7', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'group', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - enhancedMatch: true, - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'message type group is not supported', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 8', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'ABC Searched', - channel: 'abc', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Action source must be one of app_android, app_ios, web, offline', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 9', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - numOfItems: 2, - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - action_source: 'web', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - num_items: 2, - order_id: '50314b8e9bcf000000000000', - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 10', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'page_visit', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 11', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 12', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - device: { advertisingId: 'abc123', adTrackingEnabled: true }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - opt_out: false, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 13', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - ip: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: '+1234589947', - ge: 'male', - db: '19950715', - lastname: 'Rudderlabs', - firstName: 'Test', - address: { city: 'Kolkata', state: 'WB', zip: '700114', country: 'IN' }, - }, - device: { adTrackingEnabled: false }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - opt_out: true, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - action_source: 'web', - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - client_ip_address: '127.0.0.0', - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 14', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - requestIP: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: 'Hashed phone', - gender: 'Hashed Gender', - dob: 'Hashed DB', - lastname: 'Hashed Lastname', - firstName: 'Hashed FirstName', - address: { - city: 'Hashed City', - state: 'Hashed State', - zip: 'Hashed Zip', - country: 'Hashed country', - }, - }, - device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: false, - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - action_source: 'web', - opt_out: true, - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - user_data: { - ph: ['Hashed phone'], - db: ['Hashed DB'], - ln: ['Hashed Lastname'], - fn: ['Hashed FirstName'], - ct: ['Hashed City'], - st: ['Hashed State'], - zp: ['Hashed Zip'], - country: ['Hashed country'], - hashed_maids: ['Hashed maids'], - ge: ['Hashed Gender'], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 15', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'page', - name: 'ApplicationLoaded', - category: 'test category', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - requestIP: '127.0.0.0', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - phone: ['Hashed phone', 'Hashed phone1'], - gender: ['Hashed Gender', 'Hashed Gender1'], - dob: ['Hashed DB', 'Hashed DB1'], - lastname: ['Hashed Lastname', 'Hashed Lastname1'], - firstName: ['Hashed FirstName', 'Hashed FirstName1'], - address: { - city: ['Hashed City', 'Hashed City1'], - state: ['Hashed State', 'Hashed State1'], - zip: ['Hashed Zip', 'Hashed Zip1'], - country: ['Hashed country', 'Hashed country1'], - }, - }, - device: { adTrackingEnabled: false, advertisingId: 'Hashed maids' }, - library: { name: 'rudder-sdk-ruby-sync', version: '1.0.6' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { path: '', referrer: '', search: '', title: '', url: '' }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: false, - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_time: 1597383030, - action_source: 'web', - opt_out: true, - event_name: 'view_category', - app_id: '429047995', - advertiser_id: '123456', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - user_data: { - ph: ['Hashed phone', 'Hashed phone1'], - db: ['Hashed DB', 'Hashed DB1'], - ln: ['Hashed Lastname', 'Hashed Lastname1'], - fn: ['Hashed FirstName', 'Hashed FirstName1'], - ct: ['Hashed City', 'Hashed City1'], - st: ['Hashed State', 'Hashed State1'], - zp: ['Hashed Zip', 'Hashed Zip1'], - country: ['Hashed country', 'Hashed country1'], - hashed_maids: ['Hashed maids'], - ge: ['Hashed Gender', 'Hashed Gender1'], - client_user_agent: 'chrome', - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 16', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - name: 'Test Tool', - type: 'page', - sentAt: '2023-02-01T00:00:00.379Z', - userId: '', - channel: 'web', - context: { - os: { name: '', version: '' }, - app: { - name: 'RudderLabs JavaScript SDK', - version: '2.22.3', - namespace: 'com.rudderlabs.javascript', - }, - page: { - url: 'https://www.abc.com/s598907', - path: '/test-path/s598907', - title: 'Test Tool + Reviews | Rudderstack', - search: '', - tab_url: 'https://www.abc.com/s598907', - referrer: '$direct', - initial_referrer: '$direct', - referring_domain: '', - initial_referring_domain: '', - }, - locale: 'en-US', - screen: { - width: 1024, - height: 1024, - density: 1, - innerWidth: 1024, - innerHeight: 1024, - }, - traits: {}, - library: { name: 'RudderLabs JavaScript SDK', version: '2.22.3' }, - campaign: {}, - doNotSell: false, - sessionId: 1675209600203, - userAgent: - 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', - gaClientId: { - integrations: { - 'Google Ads': { gclid: '' }, - 'Google Analytics': { clientId: '1518934611.1234569600' }, - }, - }, - sessionStart: true, - }, - rudderId: '7291a10f-e7dd-49f9-94ce-0154f53897y6', - messageId: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', - timestamp: '2023-02-01T12:47:30.030Z', - properties: { - sku: '45790-32', - url: 'https://www.abc.com/23rty', - name: 'Test Tool', - path: '/test-path/tool', - email: '', - title: 'Test Tool + Reviews | Rudderstack', - review: { reviewCount: 2, averageReview: 5, reviewContentID: ['238300132'] }, - search: '', - tab_url: 'https://www.abc/com', - pageInfo: { - pageId: 's592897', - category: { - pageType: 'product', - subCategory: 'Dining & Kitchen Furniture', - pageTemplate: 'product detail grouper', - primaryCategory: 'Furniture', - }, - brandType: 'new brand', - }, - referrer: '', - subCategory: 'Dining & Kitchen Furniture', - primaryCategory: 'Furniture', - initial_referrer: '$direct', - referring_domain: '', - initial_referring_domain: '', - }, - receivedAt: '2023-02-01T12:47:30.038Z', - request_ip: '66.249.72.218', - anonymousId: 'a61c77a6-1613-474a-aee8-e7e1a0971047', - integrations: { All: true }, - originalTimestamp: '2023-02-01T00:00:00.371Z', - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123478671210', - sendingUnHashedData: false, - enableDeduplication: false, - eventsMapping: [ - { from: 'Product Added', to: 'AddToCart' }, - { from: 'Order Completed', to: 'Checkout' }, - { from: 'Product Viewed', to: 'PageVisit' }, - { from: 'Lead', to: 'Lead' }, - { from: 'Signup', to: 'Signup' }, - ], - enhancedMatch: true, - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - JSON: { - event_time: 1675255650, - event_source_url: 'https://www.abc.com/s598907', - action_source: 'web', - app_name: 'RudderLabs JavaScript SDK', - app_version: '2.22.3', - language: 'en-US', - event_id: '1c77a616-13a7-4a2e-a8e7-e1a0971897y6', - advertiser_id: '123478671210', - user_data: { - client_ip_address: '66.249.72.218', - client_user_agent: - 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/109.0.5414.101 Safari/537.36', - }, - event_name: 'page_visit', - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 17', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'test', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - sku: '1234', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 0, - content_ids: ['1234'], - contents: [{ quantity: 1, item_price: 'undefined' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 18', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - sku: '1234', - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - 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', - }, - ], - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://ct.pinterest.com/events/v3', - headers: { 'Content-Type': 'application/json' }, - params: {}, - body: { - JSON: { - event_name: 'custom', - event_time: 1597383030, - action_source: 'web', - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - advertiser_id: '123456', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - num_items: 1, - content_ids: ['507f1f77bcf86cd799439011'], - contents: [{ quantity: 1, item_price: '19' }], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 19', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - advertiserId: '123456', - appId: '429047995', - sendingUnHashedData: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - enhancedMatch: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - FORM: {}, - JSON: { - action_source: 'web', - advertiser_id: '123456', - app_id: '429047995', - custom_data: { - contents: [{ item_price: 'undefined', quantity: 1 }], - currency: 'USD', - num_items: 0, - order_id: '50314b8e9bcf000000000000', - value: '27.5', - }, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - event_name: 'custom event', - event_time: 1597383030, - user_data: { - client_user_agent: 'chrome', - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - }, - }, - JSON_ARRAY: {}, - XML: {}, - }, - endpoint: 'https://ct.pinterest.com/events/v3', - files: {}, - headers: { 'Content-Type': 'application/json' }, - method: 'POST', - params: {}, - type: 'REST', - version: '1', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 20', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Track call with v5 Api version and send external_id toggle enabled', - message: { - type: 'track', - event: 'ABC Searched', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendExternalId: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'watch_video', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - external_id: [ - '3217d71a74c219d6e31e28267b313a7ceb6a2c032db1a091c9416b25b2ae2bc8', - ], - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 21', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Custom event with v5 Api version', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - 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: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'], - ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'], - ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'], - fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'], - ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'], - st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'], - zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'], - country: ['582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf'], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 22', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: - 'Custom event with v5 Api version, with unhashed User Data and the values are an array of strings', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: ['abc@gmail.com', 'def@gmail.com'], - phone: ['+1234589947', '+1234589948'], - ge: ['male', 'male'], - db: ['19950715', '19970615'], - lastname: ['Rudderlabs', 'Xu'], - firstName: ['Test', 'Alex'], - address: { - city: ['Kolkata', 'Mumbai'], - state: ['WB', 'MH'], - zip: ['700114', '700115'], - country: ['IN', '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', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - price: 25, - quantity: 2, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - optOutType: 'LDP', - 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: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.pinterest.com/v5/ad_accounts/accountId123/events', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer conversionToken123', - }, - params: {}, - body: { - JSON: { - action_source: 'web', - event_name: 'custom', - event_time: 1597383030, - event_id: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - app_id: '429047995', - user_data: { - em: [ - '48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08', - 'c392e50ebeca7bea4405e9c545023451ac56620031f81263f681269bde14218b', - ], - ph: [ - 'd164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b', - '22bdde2594851294f2a6f4c34af704e68b398b03129ea9ceb58f0ffe33f6db52', - ], - ln: [ - 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251', - '9c2f138690fca4890c3c4a6691610fbbbdf32091cc001f7355cfdf574baa52b9', - ], - fn: [ - '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', - '4135aa9dc1b842a653dea846903ddb95bfb8c5a10c504a7fa16e10bc31d1fdf0', - ], - ct: [ - '6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85', - 'd209bcc17778fd19fd2bc0c99a3868bf011da5162d3a75037a605768ebc276e2', - ], - st: [ - '3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd', - '1b0316ed1cfed044035c55363e02ccafab26d66b1c2746b94d17285f043324aa', - ], - zp: [ - '1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c', - '4d6755aa1e85517191f06cc91448696c173e1195ae51f94a1670116ac7b5c47b', - ], - country: [ - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - '582967534d0f909d196b97f9e6921342777aea87b46fa52df165389db1fb8ccf', - ], - hashed_maids: [ - '6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090', - ], - client_user_agent: 'chrome', - }, - custom_data: { - currency: 'USD', - value: '27.5', - order_id: '50314b8e9bcf000000000000', - opt_out_type: 'LDP', - num_items: 3, - content_ids: ['507f1f77bcf86cd799439011', '505bd76785ebb509fc183733'], - contents: [ - { quantity: 1, item_price: '19' }, - { quantity: 2, item_price: '3' }, - ], - }, - }, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 23', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Ad Account Id check in V5', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: '', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Ad Account ID not found. Aborting', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 24', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - description: 'Conversion Token check in V5', - message: { - type: 'track', - event: 'random', - sentAt: '2020-08-14T05:30:30.118Z', - channel: 'web', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: '', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: true, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Conversion Token not found. Aborting', - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pinterest_tag', - description: 'Test 25', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'track', - event: 'custom event', - channel: 'web', - sentAt: '2020-08-14T05:30:30.118Z', - context: { - source: 'test', - userAgent: 'chrome', - traits: { - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - email: 'abc@gmail.com', - phone: '+1234589947', - ge: 'male', - 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' }, - }, - messageId: '7208bbb6-2c4e-45bb-bf5b-ad426f3593e9', - timestamp: '2020-08-14T05:30:30.118Z', - properties: { - tax: 2, - total: 27.5, - coupon: 'hasbros', - revenue: 48, - currency: 'USD', - discount: 2.5, - order_id: '50314b8e9bcf000000000000', - requestIP: '123.0.0.0', - shipping: 3, - subtotal: 22.5, - affiliation: 'Google Store', - checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', - }, - anonymousId: '50be5c78-6c3f-4b60-be84-97805a316fb1', - integrations: { All: true }, - }, - destination: { - ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', - Name: 'PINTEREST_TAG', - Config: { - sendAsTestEvent: false, - tagId: '123456789', - apiVersion: 'newApi', - adAccountId: 'accountId123', - conversionToken: 'conversionToken123', - appId: '429047995', - enhancedMatch: true, - enableDeduplication: true, - deduplicationKey: 'messageId', - sendingUnHashedData: true, - sendAsCustomEvent: false, - customProperties: [{ properties: 'presentclass' }, { properties: 'presentgrade' }], - eventsMapping: [{ from: 'ABC Searched', to: 'WatchVideo' }], - }, - Enabled: true, - Transformations: [], - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: - "custom event is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting", - statTags: { - destType: 'PINTEREST_TAG', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, -]; From dbb06acd52009d45a6ba78b8ed3aad6051bc69b3 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:52:49 +0530 Subject: [PATCH 15/15] fix: resolve conflicts (#2622) --- src/v0/destinations/bqstream/util.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js index aefdcc5d7c..3d210c3449 100644 --- a/src/v0/destinations/bqstream/util.js +++ b/src/v0/destinations/bqstream/util.js @@ -5,8 +5,11 @@ const { getDynamicErrorType, processAxiosResponse, } = require('../../../adapters/utils/networkUtils'); -const { DISABLE_DEST, REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); const { isHttpStatusSuccess, isDefinedAndNotNull } = require('../../util'); +const { + REFRESH_TOKEN, + AUTH_STATUS_INACTIVE, +} = require('../../../adapters/networkhandler/authConstants'); const { proxyRequest } = require('../../../adapters/network'); const { UnhandledStatusCodeError, NetworkError, AbortedError } = require('../../util/errorTypes'); const tags = require('../../util/tags'); @@ -25,7 +28,7 @@ const trimBqStreamResponse = (response) => ({ * Obtains the Destination OAuth Error Category based on the error code obtained from destination * * - If an error code is such that the user will not be allowed inside the destination, - * such error codes fall under DISABLE_DESTINATION + * such error codes fall under AUTH_STATUS_INACTIVE * - If an error code is such that upon refresh we can get a new token which can be used to send event, * such error codes fall under REFRESH_TOKEN category * - If an error code doesn't fall under both categories, we can return an empty string @@ -35,7 +38,7 @@ const trimBqStreamResponse = (response) => ({ const getDestAuthCategory = (errorCategory) => { switch (errorCategory) { case 'PERMISSION_DENIED': - return DISABLE_DEST; + return AUTH_STATUS_INACTIVE; case 'UNAUTHENTICATED': return REFRESH_TOKEN; default: @@ -89,7 +92,7 @@ const getStatusAndCategory = (dresponse, status) => { * Retryable -> 5[0-9][02-9], 401(UNAUTHENTICATED) * "Special Cases": * status=200, resp.insertErrors.length > 0 === Failure - * 403 => AccessDenied -> DISABLE_DEST, other 403 => Just abort + * 403 => AccessDenied -> AUTH_STATUS_INACTIVE, other 403 => Just abort * */ const processResponse = ({ dresponse, status } = {}) => {