{"_id":"@codepunter-labs/mock-arkesel","_rev":"2-aad5cac34f34d245abfc80e4c134024d","name":"@codepunter-labs/mock-arkesel","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@codepunter-labs/mock-arkesel","version":"0.1.0","license":"MIT","_id":"@codepunter-labs/mock-arkesel@0.1.0","maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"dist":{"shasum":"7c6dd9b21aef81a9c4841c2601084216fcfa3dc5","tarball":"https://registry.npmjs.org/@codepunter-labs/mock-arkesel/-/mock-arkesel-0.1.0.tgz","fileCount":9,"integrity":"sha512-V8j7Xzc5iu/Mym4ACrWm8YH8khYB8L2lbxIJKDCf59xBknkj0IVHs25shg79VMDNd3hcr1OoPiBs4RJFOCPVDA==","signatures":[{"sig":"MEUCICwekmJUwlpx8q/EjpNSfyoSMBoLKXpMB9M7emRYXEKRAiEAitIuE+iHVSwix7u/pR6B7WSEVkY5CJCu9k72fArkV4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58745},"main":"./dist/index.cjs","type":"module","_from":"file:codepunter-labs-mock-arkesel-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"},"_resolved":"/tmp/ea107a3a07ca3e4ab56ac73eca6f6634/codepunter-labs-mock-arkesel-0.1.0.tgz","_integrity":"sha512-V8j7Xzc5iu/Mym4ACrWm8YH8khYB8L2lbxIJKDCf59xBknkj0IVHs25shg79VMDNd3hcr1OoPiBs4RJFOCPVDA==","repository":{"url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","type":"git","directory":"packages/mock-arkesel"},"_npmVersion":"10.8.2","description":"TODO","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@codepunter-labs/mock-core":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"*","vitest":"*","typescript":"*"},"_npmOperationalInternal":{"tmp":"tmp/mock-arkesel_0.1.0_1783371655783_0.21814407624665844","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@codepunter-labs/mock-arkesel","version":"0.2.0","description":"TODO","repository":{"type":"git","url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","directory":"packages/mock-arkesel"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","dependencies":{"@codepunter-labs/mock-core":"0.2.0"},"devDependencies":{"tsup":"*","typescript":"*","vitest":"*"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit"},"_id":"@codepunter-labs/mock-arkesel@0.2.0","bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","_integrity":"sha512-x2yM1oZy2W7el87e4JHHUdDGx02qH3M2Of/FlJw/KuC0ijJwdR0+n+YNDg6q6+uGm+hffSkQkNg2vq/kTvDKXg==","_resolved":"/tmp/ae3b50555b14b8fbbbc7132d59b8a03b/codepunter-labs-mock-arkesel-0.2.0.tgz","_from":"file:codepunter-labs-mock-arkesel-0.2.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-x2yM1oZy2W7el87e4JHHUdDGx02qH3M2Of/FlJw/KuC0ijJwdR0+n+YNDg6q6+uGm+hffSkQkNg2vq/kTvDKXg==","shasum":"cd61c8c92132ab1f8c01f6be353bfc0dba7d7c6d","tarball":"https://registry.npmjs.org/@codepunter-labs/mock-arkesel/-/mock-arkesel-0.2.0.tgz","fileCount":9,"unpackedSize":62288,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDEoLlDyymINvSAPH9QGJ9s5ZVRDFjuuSMB0AiMNSrvYAIgVwK9AiusL6tD5Zo2R18SmQD2VZV9lTWija5q4lr6IGQ="}]},"_npmUser":{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"},"directories":{},"maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mock-arkesel_0.2.0_1783446218260_0.3036449431407151"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-06T21:00:55.527Z","modified":"2026-07-07T17:43:38.593Z","0.1.0":"2026-07-06T21:00:55.923Z","0.2.0":"2026-07-07T17:43:38.444Z"},"bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"license":"MIT","homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","repository":{"type":"git","url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","directory":"packages/mock-arkesel"},"description":"TODO","maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"readme":"# @codepunter-labs/mock-arkesel\n\nMock SDK for Arkesel API. Provides fully-typed mock implementations for testing Arkesel SMS, OTP, Voice, and other integrations without making real API calls.\n\n[![npm version](https://badge.fury.io/js/@codepunter-labs/mock-arkesel.svg)](https://www.npmjs.com/package/@codepunter-labs/mock-arkesel)\n[![GitHub](https://img.shields.io/badge/GitHub-Repository-blue)](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-arkesel)\n\n## Installation\n\n```bash\nnpm install @codepunter-labs/mock-arkesel\n```\n\n## Features\n\n- **SMS V2**: Send SMS, get SMS details\n- **OTP**: Generate and verify one-time passwords\n- **Voice**: Send voice messages\n- **Balance**: Check account balance\n- **Contact Groups**: Create and manage contact groups\n- **Type-safe**: Full TypeScript support with accurate API types\n- **Test Framework Agnostic**: Works with Jest, Vitest, and other spy-based frameworks\n\n## Repository\n\n- **GitHub**: https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-arkesel\n- **Source Code**: [src/](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-arkesel/src)\n- **Tests**: [tests/](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-arkesel/tests)\n\n## Usage\n\n### Basic Setup\n\n```typescript\nimport { vi } from 'vitest';\nimport { createMockArkesel } from '@codepunter-labs/mock-arkesel';\n\nconst arkesel = createMockArkesel({ spy: vi.fn });\n```\n\n### Using with Jest\n\n```typescript\nimport { createMockArkesel } from '@codepunter-labs/mock-arkesel';\n\nconst arkesel = createMockArkesel({ spy: jest.fn });\n```\n\n### Example: Send SMS\n\n```typescript\n// Default behavior - returns realistic mock data\nconst result = await arkesel.sendSms({\n  sender: 'Arkesel',\n  message: 'Hello world',\n  recipients: ['233544919953']\n});\n```\n\n### Example: Generate OTP\n\n```typescript\nconst result = await arkesel.generateOtp({\n  recipient: '233544919953',\n  expiry: 300,\n  length: 6\n});\n```\n\n### Example: Override Mock Response\n\n```typescript\nimport { makeSendSmsResponse } from '@codepunter-labs/mock-arkesel';\n\narkesel.sendSms.mockResolvedValue({\n  status: 'success',\n  data: makeSendSmsResponse()\n});\n```\n\n### Example: Error Simulation\n\n```typescript\nimport { ArkeselErrors } from '@codepunter-labs/mock-arkesel';\n\narkesel.sendSms.mockRejectedValue(\n  ArkeselErrors.invalidPhoneNumber()\n);\n```\n\n## API Reference\n\n### MockArkesel\n\n| Method | Description | Source |\n|--------|-------------|--------|\n| `sendSms(request)` | Send SMS | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `getSmsDetails(smsId)` | Get SMS details | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `generateOtp(request)` | Generate OTP | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `verifyOtp(request)` | Verify OTP | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `sendVoice(request)` | Send voice message | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `getBalance()` | Get account balance | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `createContactGroup(request)` | Create contact group | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n| `addContactsToGroup(request)` | Add contacts to group | [mock-arkesel.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/mock-arkesel.ts) |\n\n### Fixture Factories\n\n| Factory | Description | Source |\n|---------|-------------|--------|\n| `makeSmsRecipientResult(options?)` | Create SMS recipient result | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeSendSmsResponse(options?)` | Create SMS response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeSmsDetails(options?)` | Create SMS details | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeGenerateOtpResponse(options?)` | Create OTP response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeVerifyOtpResponse(options?)` | Create OTP verification response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeSendVoiceResponse(options?)` | Create voice response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeBalanceResponse(options?)` | Create balance response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeContactGroup(options?)` | Create contact group | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n| `makeAddContactsToGroupResponse(options?)` | Create add contacts response | [fixtures.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/fixtures.ts) |\n\n### Error Factories\n\n| Error | Description | Source |\n|-------|-------------|--------|\n| `ArkeselErrors.invalidPhoneNumber()` | Invalid phone number error | [errors.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/errors.ts) |\n| `ArkeselErrors.insufficientBalance()` | Insufficient balance error | [errors.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/errors.ts) |\n| `ArkeselErrors.otpExpired()` | OTP expired error | [errors.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/errors.ts) |\n| `ArkeselErrors.invalidOtp()` | Invalid OTP error | [errors.ts](https://github.com/DERRICK-TORKORNOO/mock-sdks/blob/main/packages/mock-arkesel/src/errors.ts) |\n\n## Testing Patterns\n\n### Test Success Path\n\n```typescript\ntest('should send SMS successfully', async () => {\n  const arkesel = createMockArkesel({ spy: vi.fn });\n  \n  const result = await arkesel.sendSms(request);\n  \n  expect(result.status).toBe('success');\n  expect(result.data.recipients).toHaveLength(1);\n});\n```\n\n### Test Error Handling\n\n```typescript\ntest('should handle invalid phone number error', async () => {\n  const arkesel = createMockArkesel({ spy: vi.fn });\n  \n  arkesel.sendSms.mockRejectedValue(\n    ArkeselErrors.invalidPhoneNumber()\n  );\n  \n  await expect(arkesel.sendSms(request)).rejects.toMatchObject({ message: /Invalid phone number/ });\n});\n```\n\n### Test with Custom Data\n\n```typescript\ntest('should use custom OTP expiry', async () => {\n  const arkesel = createMockArkesel({ spy: vi.fn });\n  \n  arkesel.generateOtp.mockResolvedValue({\n    status: 'success',\n    data: makeGenerateOtpResponse({ expiry: 600 })\n  });\n  \n  const result = await arkesel.generateOtp(request);\n  expect(result.data.expiry).toBe(600);\n});\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}