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

add SequenceIndexerOpts #528

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
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
4 changes: 3 additions & 1 deletion packages/indexer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
"author": "Horizon Blockchain Games",
"license": "Apache-2.0",
"scripts": {
"test": "echo",
"test": "pnpm test:run",
"test:run": "pnpm test:file tests/**.ts",
"test:file": "NODE_OPTIONS='--import tsx' mocha -R spec --timeout 30000",
"typecheck": "tsc --noEmit"
},
"dependencies": {},
Expand Down
32 changes: 30 additions & 2 deletions packages/indexer/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,40 @@ import { Indexer as IndexerRpc } from './indexer.gen'

const fetch = typeof global === 'object' ? global.fetch : window.fetch

export interface SequenceIndexerOpts {
JWTAuth?: string
ProjectAccessKey?: string
}

export class SequenceIndexer extends IndexerRpc {
public jwtAuth?: string
public projectAccessKey?: string

constructor(
hostname: string,
public projectAccessKey?: string,
public jwtAuth?: string
opts: SequenceIndexerOpts
);
constructor(
hostname: string,
projectAccessKey?: string,
jwtAuth?: string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is fine

I'm just thinking - should we call it SecretKey as in the Builder UI? cc @moskalyk

);
constructor(
hostname: string,
...args: any[]
) {
super(hostname.endsWith('/') ? hostname.slice(0, -1) : hostname, fetch)

if (args.length === 1 && typeof args[0] === 'object') {
const opts = args[0] as SequenceIndexerOpts
this.projectAccessKey = opts.ProjectAccessKey
this.jwtAuth = opts.JWTAuth
} else {
const [projectAccessKey, jwtAuth] = args
this.projectAccessKey = projectAccessKey || undefined
this.jwtAuth = jwtAuth || undefined
Comment on lines +36 to +38
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is for backward-compatibility?

can we console.error() with a warning to update to the new Opts object?

was this implemented a long time ago? do you expect customers using it?

}

this.fetch = this._fetch
}

Expand All @@ -19,6 +46,7 @@ export class SequenceIndexer extends IndexerRpc {
// if its been set on the api client
const headers: { [key: string]: any } = {}


const jwtAuth = this.jwtAuth
const projectAccessKey = this.projectAccessKey

Expand Down
94 changes: 94 additions & 0 deletions packages/indexer/tests/constructor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import * as chai from 'chai'
import chaiAsPromised from 'chai-as-promised'

import { SequenceIndexer, SequenceIndexerOpts } from '@0xsequence/indexer'

const { expect } = chai.use(chaiAsPromised)

describe('SequenceIndexer initialization', () => {
it('should initialize without arguments', async () => {
const x = new SequenceIndexer('http://localhost:3000')
expect(x.jwtAuth).to.be.undefined
expect(x.projectAccessKey).to.be.undefined
});

it('should initialize with PAK', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
'project-access-key'
)
expect(x.jwtAuth).to.be.undefined
expect(x.projectAccessKey).to.equal('project-access-key')
})

it('should initialize with JWT', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
null,
'jwt-auth'
)

expect(x.jwtAuth).to.equal('jwt-auth')
expect(x.projectAccessKey).to.be.undefined
})

it('should initialize with JWT and PAK', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
'project-access-key',
'jwt-auth'
)

expect(x.jwtAuth).to.equal('jwt-auth')
expect(x.projectAccessKey).to.equal('project-access-key')
})

it('should initialize with opts', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
{
JWTAuth: 'jwt-auth',
ProjectAccessKey: 'project-access-key'
}
)

expect(x.jwtAuth).to.equal('jwt-auth')
expect(x.projectAccessKey).to.equal('project-access-key')
})

it('should initialize with only PAK in opts', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
<SequenceIndexerOpts>{
ProjectAccessKey: 'project-access-key'
}
)

expect(x.jwtAuth).to.be.undefined
expect(x.projectAccessKey).to.equal('project-access-key')
})

it('should initialize with empty opts', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
<SequenceIndexerOpts>{
}
)

expect(x.jwtAuth).to.be.undefined
expect(x.projectAccessKey).to.be.undefined
})

it('should ignore invalid arguments', async () => {
const x = new SequenceIndexer(
'http://localhost:3000',
{
A: 'a',
B: 'b'
},
)

expect(x.jwtAuth).to.be.undefined
expect(x.projectAccessKey).to.be.undefined
})
});
Loading