Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gravito User Id submodule: initial release #8414

Merged
merged 5 commits into from
May 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
});
});
});