Skip to content

Commit

Permalink
Gravito User Id submodule: initial release (prebid#8414)
Browse files Browse the repository at this point in the history
* gravitompId user module for integrating gravito first party cookie with prebid js

* fixed eslint issues raised by circleci

* fixed trailing spaces error raised by circleci
  • Loading branch information
rahulgravito authored and renebaudisch committed Jun 28, 2022
1 parent 26380c1 commit 89535f5
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 1 deletion.
3 changes: 3 additions & 0 deletions integrationExamples/gpt/userId_example.html
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,9 @@
},
{
"name": "dacId"
},
{
"name": "gravitompId"
}
],
"syncDelay": 5000,
Expand Down
3 changes: 2 additions & 1 deletion modules/.submodules.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
"unifiedIdSystem",
"verizonMediaIdSystem",
"zeotapIdPlusIdSystem",
"adqueryIdSystem"
"adqueryIdSystem",
"gravitoIdSystem"
],
"adpod": [
"freeWheelAdserverVideo",
Expand Down
57 changes: 57 additions & 0 deletions modules/gravitoIdSystem.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* This module adds gravitompId to the User ID module
* The {@link module:modules/userId} module is required
* @module modules/gravitoIdSystem
* @requires module:modules/userId
*/

import { submodule } from '../src/hook.js';
import { getStorageManager } from '../src/storageManager.js';

export const storage = getStorageManager();

export const cookieKey = 'gravitompId';

export const gravitoIdSystemSubmodule = {
/**
* used to link submodule with config
* @type {string}
*/
name: 'gravitompId',

/**
* performs action to obtain id
* @function
* @returns { {id: {gravitompId: string}} | undefined }
*/
getId: function() {
const newId = storage.getCookie(cookieKey);
if (!newId) {
return undefined;
}
const result = {
gravitompId: newId
}
return {id: result};
},

/**
* decode the stored id value for passing to bid requests
* @function
* @param { {gravitompId: string} } value
* @returns { {gravitompId: {id: string} } | undefined }
*/
decode: function(value) {
if (value && typeof value === 'object') {
const result = {};
if (value.gravitompId) {
result.id = value.gravitompId
}
return {gravitompId: result};
}
return undefined;
},

}

submodule('userId', gravitoIdSystemSubmodule);
28 changes: 28 additions & 0 deletions modules/gravitoIdSystem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
## Gravito User ID Submodule

Gravito ID, provided by [Gravito Ltd.](https://gravito.net), is ID for ad targeting by using 1st party cookie.
Please contact Gravito Ltd. before using this ID.

## Building Prebid with Gravito ID Support

First, make sure to add the Gravito ID submodule to your Prebid.js package with:

```
gulp build --modules=gravitoIdSystem
```

The following configuration parameters are available:

```javascript
pbjs.setConfig({
userSync: {
userIds: [{
name: 'gravitompId'
}]
}
});
```

| Param under userSync.userIds[] | Scope | Type | Description | Example |
| --- | --- | --- | --- | --- |
| name | Required | String | The name of this module. | `"gravitompId"` |
6 changes: 6 additions & 0 deletions modules/userId/eids.js
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,12 @@ export const USER_IDS_CONFIG = {
return data.envelope;
}
},

// Gravito MP ID
'gravitompId': {
source: 'gravito.net',
atype: 1
},
};

// this function will create an eid object for the given UserId sub-module
Expand Down
3 changes: 3 additions & 0 deletions modules/userId/userId.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ pbjs.setConfig({
},
{
name: "dacId"
},
{
name: "gravitompId"
}
],
syncDelay: 5000,
Expand Down
51 changes: 51 additions & 0 deletions test/spec/modules/gravitoIdSystem_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { gravitoIdSystemSubmodule, storage, cookieKey } from 'modules/gravitoIdSystem.js';

const GRAVITOID_TEST_VALUE = 'gravitompIdTest';
const GRAVITOID_TEST_OBJ = {
gravitompId: GRAVITOID_TEST_VALUE
};

describe('gravitompId module', function () {
let getCookieStub;

beforeEach(function (done) {
getCookieStub = sinon.stub(storage, 'getCookie');
done();
});

afterEach(function () {
getCookieStub.restore();
});

const cookieTestCasesForEmpty = [
undefined,
null,
''
]

describe('getId()', function () {
it('should return the gravitompId when it exists in cookie', function () {
getCookieStub.withArgs(cookieKey).returns(GRAVITOID_TEST_VALUE);
const id = gravitoIdSystemSubmodule.getId();
expect(id).to.be.deep.equal({id: {gravitompId: GRAVITOID_TEST_VALUE}});
});

cookieTestCasesForEmpty.forEach(testCase => it('should return the gravitompId when it not exists in cookie', function () {
getCookieStub.withArgs(cookieKey).returns(testCase);
const id = gravitoIdSystemSubmodule.getId();
expect(id).to.be.deep.equal(undefined);
}));
});

describe('decode()', function () {
it('should return the gravitompId when it exists in cookie', function () {
const decoded = gravitoIdSystemSubmodule.decode(GRAVITOID_TEST_OBJ);
expect(decoded).to.be.deep.equal({gravitompId: {id: GRAVITOID_TEST_VALUE}});
});

it('should return the undefined when decode id is not "string"', function () {
const decoded = gravitoIdSystemSubmodule.decode(1);
expect(decoded).to.equal(undefined);
});
});
});

0 comments on commit 89535f5

Please sign in to comment.