diff --git a/src/security-rules/security-rules-api-client.ts b/src/security-rules/security-rules-api-client.ts index dc0627745d..b72060260d 100644 --- a/src/security-rules/security-rules-api-client.ts +++ b/src/security-rules/security-rules-api-client.ts @@ -250,6 +250,7 @@ interface Error { const ERROR_CODE_MAPPING: {[key: string]: SecurityRulesErrorCode} = { INVALID_ARGUMENT: 'invalid-argument', NOT_FOUND: 'not-found', + RESOURCE_EXHAUSTED: 'resource-exhausted', UNAUTHENTICATED: 'authentication-error', UNKNOWN: 'unknown-error', }; diff --git a/src/security-rules/security-rules-utils.ts b/src/security-rules/security-rules-utils.ts index 21f013f311..d21f5a0f0e 100644 --- a/src/security-rules/security-rules-utils.ts +++ b/src/security-rules/security-rules-utils.ts @@ -23,6 +23,7 @@ export type SecurityRulesErrorCode = | 'invalid-argument' | 'invalid-server-response' | 'not-found' + | 'resource-exhausted' | 'service-unavailable' | 'unknown-error'; diff --git a/test/unit/security-rules/security-rules-api-client.spec.ts b/test/unit/security-rules/security-rules-api-client.spec.ts index b89f3383cc..21802d8ffc 100644 --- a/test/unit/security-rules/security-rules-api-client.spec.ts +++ b/test/unit/security-rules/security-rules-api-client.spec.ts @@ -214,6 +214,23 @@ describe('SecurityRulesApiClient', () => { .should.eventually.be.rejected.and.deep.equal(expected); }); + it('should throw when the rulesets limit reached', () => { + const resourceExhaustedError = { + error: { + code: 429, + message: 'The maximum number of Rulesets (2500) have already been created for the project.', + status: 'RESOURCE_EXHAUSTED', + }, + }; + const stub = sinon + .stub(HttpClient.prototype, 'send') + .rejects(utils.errorFrom(resourceExhaustedError, 429)); + stubs.push(stub); + const expected = new FirebaseSecurityRulesError('resource-exhausted', resourceExhaustedError.error.message); + return apiClient.createRuleset(RULES_CONTENT) + .should.eventually.be.rejected.and.deep.equal(expected); + }); + it('should throw unknown-error when error code is not present', () => { const stub = sinon .stub(HttpClient.prototype, 'send')