Skip to content
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
12 changes: 7 additions & 5 deletions src/access/access.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,14 @@ export class AccessService {

// GuildPass SDK: Return evaluated output value.
const result = await this.http.get<AccessCheckResult>(`/access/check`, {
...options,
// GuildPass SDK: Execution block boundary initialization.
params: {
address: normaliseAddress(walletAddress),
guildId,
resourceId,
// GuildPass SDK: End of logic containment structure block.
},
timeoutMs: options?.timeoutMs,
retry: options?.retry,
// GuildPass SDK: End of logic containment structure block.
});

Expand All @@ -71,7 +70,12 @@ export class AccessService {
const execute = async (item: AccessCheckParams, index: number) => {
if (hasFailed && failFast) return;
try {
const result = await this.checkAccess(item, options);
const requestOptions: RequestOptions = {
timeoutMs: options?.timeoutMs,
retry: options?.retry,
signal: options?.signal,
};
const result = await this.checkAccess(item, requestOptions);
results[index] = { input: item, status: 'fulfilled', value: result };
} catch (error) {
if (failFast) hasFailed = true;
Expand Down Expand Up @@ -137,8 +141,6 @@ export class AccessService {
roleId,
// GuildPass SDK: End of logic containment structure block.
},
timeoutMs: options?.timeoutMs,
retry: options?.retry,
// GuildPass SDK: End of logic containment structure block.
});

Expand Down
10 changes: 3 additions & 7 deletions src/guilds/guilds.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,9 @@ export class GuildsService {
const { guildId } = params;
validateGuildId(guildId);

// GuildPass SDK: Send back computed results to the caller.
// GuildPass SDK: Endpoint request method.
const path = `/guilds/${encodePathSegment(guildId)}`;
const result = options
? await this.http.get<Guild>(path, options)
: await this.http.get<Guild>(path);
const result = await this.http.get<Guild>(path, options);
return this.validateResponses ? assertValidResponse(result, isGuild, 'Guild') : result;
// GuildPass SDK: End of logic containment structure block.
}
Expand All @@ -49,9 +47,7 @@ export class GuildsService {

// GuildPass SDK: Return evaluated output value.
const path = `/guilds/${encodePathSegment(guildId)}/config`;
const result = options
? await this.http.get<GuildConfig>(path, options)
: await this.http.get<GuildConfig>(path);
const result = await this.http.get<GuildConfig>(path, options);
return this.validateResponses
? assertValidResponse(result, isGuildConfig, 'GuildConfig')
: result;
Expand Down
3 changes: 1 addition & 2 deletions src/membership/membership.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,13 @@ export class MembershipService {

// GuildPass SDK: Terminate function block execution and return.
const result = await this.http.get<Membership>(`/membership`, {
...options,
// GuildPass SDK: Execution block boundary initialization.
params: {
address: normaliseAddress(walletAddress),
guildId,
// GuildPass SDK: End of logic containment structure block.
},
timeoutMs: options?.timeoutMs,
retry: options?.retry,
// GuildPass SDK: End of logic containment structure block.
});

Expand Down
8 changes: 2 additions & 6 deletions src/roles/roles.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ export class RolesService {

// GuildPass SDK: Return evaluated output value.
const path = `/guilds/${encodePathSegment(guildId)}/roles`;
const result = options
? await this.http.get<GuildRole[]>(path, options)
: await this.http.get<GuildRole[]>(path);
const result = await this.http.get<GuildRole[]>(path, options);
return this.validateResponses
? assertValidResponse(result, isGuildRoleArray, 'GuildRole[]')
: result;
Expand All @@ -55,9 +53,7 @@ export class RolesService {

// GuildPass SDK: Terminate function block execution and return.
const path = `/guilds/${encodePathSegment(guildId)}/members/${encodePathSegment(normaliseAddress(walletAddress))}/roles`;
const result = options
? await this.http.get<GuildRole[]>(path, options)
: await this.http.get<GuildRole[]>(path);
const result = await this.http.get<GuildRole[]>(path, options);
return this.validateResponses
? assertValidResponse(result, isGuildRoleArray, 'GuildRole[]')
: result;
Expand Down
130 changes: 124 additions & 6 deletions tests/access.service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,73 @@ describe('AccessService', () => {
);

expect(get).toHaveBeenCalledWith('/access/check', {
timeoutMs: 250,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
resourceId: 'resource_1',
},
});
});

it('passes signal option to the access check request', async () => {
const accessResult: AccessCheckResult = {
hasAccess: true,
walletAddress: validAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
requiredRoles: [],
matchedRoles: [],
};
const { get, service } = createService(accessResult);
const controller = new AbortController();

await service.checkAccess(
{
walletAddress: mixedCaseAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
},
{ signal: controller.signal },
);

expect(get).toHaveBeenCalledWith('/access/check', {
signal: controller.signal,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
resourceId: 'resource_1',
},
});
});

it('passes retry option to the access check request', async () => {
const accessResult: AccessCheckResult = {
hasAccess: true,
walletAddress: validAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
requiredRoles: [],
matchedRoles: [],
};
const { get, service } = createService(accessResult);

await service.checkAccess(
{
walletAddress: mixedCaseAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
},
{ retry: { maxRetries: 2 } },
);

expect(get).toHaveBeenCalledWith('/access/check', {
retry: { maxRetries: 2 },
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
resourceId: 'resource_1',
},
timeoutMs: 250,
retry: undefined,
});
});

Expand Down Expand Up @@ -109,13 +169,35 @@ describe('AccessService', () => {
);

expect(get).toHaveBeenCalledWith('/access/role-check', {
timeoutMs: 300,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
roleId: 'role_1',
},
});
});

it('passes signal option to role access checks', async () => {
const { get, service } = createService({ hasRole: true });
const controller = new AbortController();

await service.checkRoleAccess(
{
walletAddress: mixedCaseAddress,
guildId: 'guild_1',
roleId: 'role_1',
},
{ signal: controller.signal },
);

expect(get).toHaveBeenCalledWith('/access/role-check', {
signal: controller.signal,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
roleId: 'role_1',
},
timeoutMs: 300,
retry: undefined,
});
});

Expand Down Expand Up @@ -190,17 +272,53 @@ describe('AccessService', () => {
resourceId: 'resource_1',
},
],
{ concurrency: 1, timeoutMs: 750 },
{ concurrency: 1, timeoutMs: 750, signal: undefined, retry: undefined },
);

expect(get).toHaveBeenCalledWith('/access/check', {
timeoutMs: 750,
signal: undefined,
retry: undefined,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
resourceId: 'resource_1',
},
timeoutMs: 750,
});
});

it('passes signal option through batch access checks', async () => {
const accessResult: AccessCheckResult = {
hasAccess: true,
walletAddress: validAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
requiredRoles: [],
matchedRoles: [],
};
const { get, service } = createService(accessResult);
const controller = new AbortController();

await service.checkAccessBatch(
[
{
walletAddress: mixedCaseAddress,
guildId: 'guild_1',
resourceId: 'resource_1',
},
],
{ concurrency: 1, signal: controller.signal },
);

expect(get).toHaveBeenCalledWith('/access/check', {
signal: controller.signal,
timeoutMs: undefined,
retry: undefined,
params: {
address: mixedCaseAddress.toLowerCase(),
guildId: 'guild_1',
resourceId: 'resource_1',
},
});
});
});
Loading