@rezamirzapour/pod-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/crypto.ts","../src/services/sso/index.ts","../src/services/customPost/crud.ts","../src/services/customPost/index.ts","../src/services/podspace/index.ts","../src/services/podform/index.ts","../src/services/notification/index.ts","../src/services/social/index.ts","../src/services/cms/formatter.ts","../src/services/cms/index.ts","../src/services/iums/index.ts","../src/client.ts"],"names":["createNextHttp"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Cryptographic and encoding utilities for POD Platform services.\n * Uses standard Web Crypto API (supported natively in Node.js 18+, Browsers, and Edge).\n */\n\nexport function encodeBase64(str: string): string {\n if (typeof btoa === 'function') {\n return btoa(str);\n }\n return Buffer.from(str).toString('base64');\n}\n\nexport async function createRsaSignature(\n value: string,\n privateKeyPem: string,\n encoding: 'base64' | 'hex' = 'base64'\n): Promise<string> {\n const pemHeader = '-----BEGIN PRIVATE KEY-----';\n const pemFooter = '-----END PRIVATE KEY-----';\n const pemContents = privateKeyPem\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s+/g, '');\n\n const binaryString = typeof atob === 'function' ? atob(pemContents) : Buffer.from(pemContents, 'base64').toString('binary');\n const binaryDer = Uint8Array.from(binaryString, (c) => c.charCodeAt(0));\n\n const cryptoKey = await crypto.subtle.importKey(\n 'pkcs8',\n binaryDer.buffer,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: 'SHA-256',\n },\n false,\n ['sign']\n );\n\n const encoder = new TextEncoder();\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('RSASSA-PKCS1-v1_5', cryptoKey, data);\n const rawBytes = new Uint8Array(signature);\n\n if (encoding === 'base64') {\n if (typeof btoa === 'function') {\n return btoa(String.fromCharCode(...rawBytes));\n }\n return Buffer.from(rawBytes).toString('base64');\n }\n\n return Array.from(rawBytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport async function generatePodSignatureHeader(keyId: string, privateKeyPem?: string): Promise<string> {\n if (!privateKeyPem) return '';\n const sign = await createRsaSignature('host: accounts.pod.ir', privateKeyPem, 'base64');\n return `Signature keyId=${keyId}, signature=${sign}, headers=host`;\n}\n","import { NextHttp, createNextHttp } from '@rezamirzapour/http';\nimport { encodeBase64, generatePodSignatureHeader } from '../../utils/crypto';\nimport type {\n HandshakeResponse,\n TokenResponse,\n VerifyResponse,\n SsoUserProfile,\n SendOtpOptions,\n} from './types';\nimport type { PodResponse } from '../../types';\n\nexport interface SsoServiceOptions {\n baseUrl: string;\n clientId: string;\n clientSecret?: string;\n apiToken?: string;\n privateKeyPem?: string;\n websiteUrl?: string;\n revalidate?: number | string;\n}\n\nexport class SsoService {\n private http: NextHttp;\n private clientId: string;\n private clientSecret: string;\n private apiToken: string;\n private privateKeyPem: string;\n private websiteUrl: string;\n private revalidate: number;\n\n constructor(options: SsoServiceOptions) {\n this.clientId = options.clientId || '';\n this.clientSecret = options.clientSecret || '';\n this.apiToken = options.apiToken || '';\n this.privateKeyPem = options.privateKeyPem || '';\n this.websiteUrl = options.websiteUrl || '';\n this.revalidate = Number(options.revalidate) || 0;\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-SSO',\n });\n }\n\n /**\n * Performs handshake with POD SSO to obtain a keyId for OTP signing.\n */\n public async handshake(deviceUid: string, ip: string): Promise<PodResponse<HandshakeResponse>> {\n const params = {\n device_type: 'Desktop',\n algorithm: 'rsa-sha256',\n device_uid: deviceUid,\n device_client_ip: ip,\n };\n\n try {\n const result = await this.http.post<HandshakeResponse>(\n `/oauth2/clients/handshake/${this.clientId}`,\n undefined,\n {\n params,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n Accept: 'application/json; charset=utf-8',\n Authorization: `Bearer ${this.apiToken}`,\n },\n }\n );\n\n return {\n hasError: false,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.data?.error_description || err.message,\n errorCode: err.status,\n };\n }\n }\n\n /**\n * Sends an OTP SMS to the specified phone number.\n */\n public async sendOtpCode(\n keyId: string,\n phoneNumber: string,\n options?: SendOtpOptions\n ): Promise<{ hasError: boolean; authorization?: string; identity?: string; result?: any; message?: string }> {\n try {\n const authorization = await generatePodSignatureHeader(keyId, this.privateKeyPem);\n const params = {\n identityType: options?.identityType || 'phone_number',\n response_type: options?.response_type || 'code',\n referrerType: options?.referrerType || 'username',\n linkDeliveryType: options?.linkDeliveryType || 'SMS',\n scope: options?.scope || 'phone profile',\n redirect_uri: options?.redirect_uri || `${this.websiteUrl}/login`,\n };\n\n const result = await this.http.post(`/oauth2/otp/authorize/${phoneNumber}`, undefined, {\n params,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n Accept: 'application/json; charset=utf-8',\n Authorization: authorization,\n },\n });\n\n return {\n hasError: false,\n authorization,\n identity: phoneNumber,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.data?.error_description || err.message,\n };\n }\n }\n\n /**\n * Verifies an OTP code received by SMS.\n */\n public async verifyOtpCode(\n authorization: string,\n phoneNumber: string,\n code: string,\n redirectUri?: string\n ): Promise<PodResponse<VerifyResponse>> {\n const params = {\n otp: code,\n redirect_uri: redirectUri || `${this.websiteUrl}/login`,\n };\n\n try {\n const result = await this.http.post<VerifyResponse>(\n `/oauth2/otp/verify/${phoneNumber}`,\n undefined,\n {\n params,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n Accept: 'application/json; charset=utf-8',\n Authorization: authorization,\n },\n }\n );\n\n return {\n hasError: false,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.data?.error_description || err.data?.error || err.message,\n errorCode: err.status,\n };\n }\n }\n\n /**\n * Exchanges authorization code for access & refresh tokens.\n */\n public async generateToken(code: string, redirectUri?: string): Promise<PodResponse<TokenResponse>> {\n const clientSignature = encodeBase64(`${this.clientId}:${this.clientSecret}`);\n const params = {\n grant_type: 'authorization_code',\n code,\n redirect_uri: redirectUri || `${this.websiteUrl}/login`,\n };\n\n try {\n const result = await this.http.post<TokenResponse>('/oauth2/token', undefined, {\n params,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n Accept: 'application/json; charset=utf-8',\n Authorization: `Basic ${clientSignature}`,\n },\n });\n\n return {\n hasError: false,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.data?.error_description || err.message,\n errorCode: err.status,\n };\n }\n }\n\n /**\n * Refreshes an expired access token using a refresh token.\n */\n public async refreshToken(refreshToken: string): Promise<PodResponse<TokenResponse>> {\n const clientSignature = encodeBase64(`${this.clientId}:${this.clientSecret}`);\n const params = {\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n };\n\n try {\n const result = await this.http.post<TokenResponse>('/oauth2/token', undefined, {\n params,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n Authorization: `Basic ${clientSignature}`,\n },\n });\n\n return {\n hasError: false,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.data?.error_description || err.message,\n errorCode: err.status,\n };\n }\n }\n\n /**\n * Fetches user profile from SSO using the access token.\n */\n public async getUserProfile(accessToken: string): Promise<PodResponse<SsoUserProfile>> {\n try {\n const result = await this.http.get<SsoUserProfile>('/users', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n next: this.revalidate ? { revalidate: this.revalidate } : undefined,\n });\n\n return {\n hasError: false,\n result,\n };\n } catch (err: any) {\n return {\n hasError: true,\n message: err.message,\n errorCode: err.status,\n };\n }\n }\n}\n\nexport * from './types';\n","import type { CustomPostService } from './index';\nimport type {\n CustomPostCrudConfig,\n Metadata,\n SearchTimelineByMetadataParam,\n SearchTimelineResponse,\n GetCustomPostResponse,\n AddCustomPostResponse,\n} from './types';\nimport type { RequestOptions } from '@rezamirzapour/http';\n\n/**\n * Generic Type-Safe CRUD Repository built on top of POD CustomPost service.\n * Allows managing any arbitrary business entity (Articles, Products, Courses, etc.)\n * with full typing and metadata binding.\n */\nexport class CustomPostCrudService<DataType> {\n constructor(\n private readonly service: CustomPostService,\n private readonly config: CustomPostCrudConfig\n ) {}\n\n protected buildMetadata(data: DataType): Metadata<DataType> {\n return {\n objectInfo: {\n type: this.config.type,\n detailedType: this.config.detailedType,\n },\n data,\n };\n }\n\n /**\n * Searches and retrieves all entities matching the query.\n */\n public async getAll(\n params?: SearchTimelineByMetadataParam<Metadata<DataType>>,\n options?: RequestOptions\n ): Promise<SearchTimelineResponse<Metadata<DataType>>> {\n return this.service.searchTimelineByMetadata<Metadata<DataType>>(\n params || {},\n options\n );\n }\n\n /**\n * Retrieves a single entity by its numerical ID.\n */\n public async getById(\n id: number,\n options?: RequestOptions\n ): Promise<GetCustomPostResponse<Metadata<DataType>>> {\n return this.service.getCustomPost<Metadata<DataType>>(\n { id, offset: 0, size: 1 },\n options\n );\n }\n\n /**\n * Creates a new entity.\n */\n public async create(\n data: DataType,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<Metadata<DataType>>> {\n return this.service.addCustomPost<Metadata<DataType>>(\n {\n name: this.config.name,\n content: this.config.content || ' ',\n metadata: this.buildMetadata(data),\n },\n options\n );\n }\n\n /**\n * Creates multiple entities in batch.\n */\n public async createMultiple(\n dataList: DataType[],\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<Metadata<DataType>>[]> {\n const items = dataList.map((data) => ({\n name: this.config.name,\n content: this.config.content || ' ',\n metadata: this.buildMetadata(data),\n }));\n return this.service.addCustomPostList<Metadata<DataType>>(items, options);\n }\n\n /**\n * Updates an existing entity by entityId.\n */\n public async update(\n entityId: number,\n data: DataType,\n enable: boolean = true,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<Metadata<DataType>>> {\n return this.service.updateCustomPost<Metadata<DataType>>(\n {\n entityId,\n name: this.config.name,\n content: this.config.content || ' ',\n metadata: this.buildMetadata(data),\n enable,\n },\n options\n );\n }\n\n /**\n * Creates a post and automatically updates it by binding the generated entityId into the record data.\n */\n public async createAndBindEntityId(\n data: DataType,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<Metadata<DataType>>> {\n const createResponse = await this.create(data, options);\n if (!createResponse.hasError && createResponse.result?.entityId) {\n return this.update(\n createResponse.result.entityId,\n {\n ...data,\n entityId: createResponse.result.entityId,\n },\n true,\n options\n );\n }\n return createResponse;\n }\n\n /**\n * Archives (disables) an entity without deleting its history.\n */\n public async archive(\n entityId: number,\n data: DataType,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<Metadata<DataType>>> {\n return this.update(entityId, data, false, options);\n }\n\n /**\n * Deletes an entity permanently.\n */\n public async delete(entityId: number, options?: RequestOptions): Promise<AddCustomPostResponse> {\n return this.service.deleteCustomPost(entityId, options);\n }\n}\n","import { NextHttp, createNextHttp, RequestOptions } from '@rezamirzapour/http';\nimport { CustomPostCrudService } from './crud';\nimport type {\n SearchTimelineByMetadataParam,\n SearchTimelineResponse,\n GetCustomPostParams,\n GetCustomPostResponse,\n AddCustomPostParams,\n UpdateCustomPostParams,\n AddCustomPostResponse,\n CustomPostCrudConfig,\n} from './types';\n\nexport interface CustomPostServiceOptions {\n baseUrl: string;\n apiToken: string;\n revalidate?: number | string;\n}\n\nexport class CustomPostService {\n private http: NextHttp;\n private apiToken: string;\n private revalidate: number;\n\n constructor(options: CustomPostServiceOptions) {\n this.apiToken = options.apiToken || '';\n this.revalidate = Number(options.revalidate) || 0;\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-CustomPost',\n headers: {\n _token_: this.apiToken,\n },\n });\n }\n\n private safeParseJson(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n\n /**\n * Searches timeline entries by structured metadata query, returning typed items.\n */\n public async searchTimelineByMetadata<T extends object = any>(\n params: SearchTimelineByMetadataParam<T>,\n options?: RequestOptions\n ): Promise<SearchTimelineResponse<T>> {\n const rawParams = {\n ...params,\n ...(params.metadata ? { metadata: typeof params.metadata === 'object' ? JSON.stringify(params.metadata) : params.metadata } : {}),\n ...(params.metaQuery ? { metaQuery: typeof params.metaQuery === 'object' ? JSON.stringify(params.metaQuery) : params.metaQuery } : {}),\n };\n\n const response = await this.http.get<SearchTimelineResponse<any>>(\n '/srv/core/nzh/biz/searchTimelineByMetadata',\n {\n ...options,\n params: rawParams,\n next: this.revalidate ? { revalidate: this.revalidate, ...(options?.next || {}) } : options?.next,\n }\n );\n\n if (response?.result && Array.isArray(response.result)) {\n response.result = response.result.map((el: any) => {\n if (el?.item?.metadata) {\n el.item.metadata = this.safeParseJson(el.item.metadata);\n }\n return el;\n });\n }\n\n return response as SearchTimelineResponse<T>;\n }\n\n /**\n * Retrieves custom posts list or a single post by entityId/id with typed metadata.\n */\n public async getCustomPost<T = any>(\n params: GetCustomPostParams,\n options?: RequestOptions\n ): Promise<GetCustomPostResponse<T>> {\n const response = await this.http.get<GetCustomPostResponse<any>>(\n '/srv/core/nzh/biz/customPostList',\n {\n ...options,\n params,\n next: this.revalidate ? { revalidate: this.revalidate, ...(options?.next || {}) } : options?.next,\n }\n );\n\n if (response?.result && Array.isArray(response.result)) {\n response.result = response.result.map((el: any) => {\n if (el?.metadata) {\n el.metadata = this.safeParseJson(el.metadata);\n }\n return el;\n });\n }\n\n return response as GetCustomPostResponse<T>;\n }\n\n /**\n * Creates a new custom post with strongly typed metadata.\n */\n public async addCustomPost<T = any>(\n params: AddCustomPostParams<T>,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<T>> {\n const payload = {\n ...params,\n metadata: typeof params.metadata === 'object' ? JSON.stringify(params.metadata) : params.metadata,\n content: params.content || ' ',\n };\n\n const response = await this.http.post<AddCustomPostResponse<any>>(\n '/srv/core/nzh/biz/addCustomPost',\n new URLSearchParams(payload as any),\n {\n ...options,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n _token_: this.apiToken,\n ...(options?.headers as any),\n },\n }\n );\n\n if (response?.result?.metadata) {\n response.result.metadata = this.safeParseJson(response.result.metadata);\n }\n\n return response as AddCustomPostResponse<T>;\n }\n\n /**\n * Creates multiple custom posts in bulk.\n */\n public async addCustomPostList<T = any>(\n items: AddCustomPostParams<T>[],\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<T>[]> {\n const promises = items.map((item) => this.addCustomPost<T>(item, options));\n return Promise.all(promises);\n }\n\n /**\n * Updates an existing custom post by its entityId with typed metadata.\n */\n public async updateCustomPost<T = any>(\n params: UpdateCustomPostParams<T>,\n options?: RequestOptions\n ): Promise<AddCustomPostResponse<T>> {\n const payload = {\n ...params,\n ...(params.metadata ? { metadata: typeof params.metadata === 'object' ? JSON.stringify(params.metadata) : params.metadata } : {}),\n ...(params.entityId ? { entityId: params.entityId.toString() } : {}),\n };\n\n const response = await this.http.post<AddCustomPostResponse<any>>(\n '/srv/core/nzh/biz/updateCustomPost',\n new URLSearchParams(payload as any),\n {\n ...options,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n _token_: this.apiToken,\n ...(options?.headers as any),\n },\n }\n );\n\n if (response?.result?.metadata) {\n response.result.metadata = this.safeParseJson(response.result.metadata);\n }\n\n return response as AddCustomPostResponse<T>;\n }\n\n /**\n * Deletes a custom post by entityId.\n */\n public async deleteCustomPost(entityId: number, options?: RequestOptions): Promise<AddCustomPostResponse> {\n return this.http.post<AddCustomPostResponse>(\n '/srv/core/nzh/biz/deleteCustomPost',\n undefined,\n {\n ...options,\n params: { entityId },\n }\n );\n }\n\n /**\n * Factory method to create a high-level Generic CRUD repository for any entity type.\n */\n public createCrud<DataType>(config: CustomPostCrudConfig): CustomPostCrudService<DataType> {\n return new CustomPostCrudService<DataType>(this, config);\n }\n}\n\nexport * from './types';\nexport * from './crud';\n","import { NextHttp, createNextHttp } from '@rezamirzapour/http';\nimport type { PodspaceUploadResponse } from './types';\n\nexport interface PodspaceServiceOptions {\n baseUrl: string;\n apiToken: string;\n}\n\nexport class PodspaceService {\n private http: NextHttp;\n private apiToken: string;\n private baseUrl: string;\n\n constructor(options: PodspaceServiceOptions) {\n this.baseUrl = options.baseUrl;\n this.apiToken = options.apiToken || '';\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-Podspace',\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n },\n });\n }\n\n /**\n * Uploads a file (via FormData) to the POD Podspace storage.\n */\n public async uploadFile(\n formData: FormData,\n path: string = '/',\n isPublic: boolean = true\n ): Promise<PodspaceUploadResponse> {\n const params = {\n path,\n isPublic,\n };\n\n return this.http.post<PodspaceUploadResponse>('/api/files', formData, {\n params,\n });\n }\n\n /**\n * Builds the public or private URL to download/view a file.\n */\n public getFileUrl(hash: string, isPublic: boolean = true): string {\n return `${this.baseUrl}/api/files/${hash}?isPublic=${isPublic}`;\n }\n}\n\nexport * from './types';\n","import { NextHttp, createNextHttp, RequestOptions } from '@rezamirzapour/http';\nimport type { PodFormResponse, PodFormItem } from './types';\n\nexport interface PodFormServiceOptions {\n baseUrl: string;\n apiToken: string;\n revalidate?: number | string;\n}\n\nexport class PodFormService {\n private http: NextHttp;\n private apiToken: string;\n private revalidate: number;\n\n constructor(options: PodFormServiceOptions) {\n this.apiToken = options.apiToken || '';\n this.revalidate = Number(options.revalidate) || 0;\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-PodForm',\n headers: {\n token: this.apiToken,\n accept: '*/*',\n },\n });\n }\n\n /**\n * Submits responses/answers to a POD Form.\n */\n public async sendForm<T extends Record<string, any>>(\n formId: number,\n data: T\n ): Promise<PodFormResponse> {\n const payload = new URLSearchParams({\n ...data,\n userResponseTimeMilliSeconds: '230000',\n });\n\n return this.http.post<PodFormResponse>(`/responses/${formId}`, payload, {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n });\n }\n\n /**\n * Retrieves a form and its questions by ID.\n */\n public async getPodformById(\n id: number,\n options?: RequestOptions\n ): Promise<PodFormResponse<PodFormItem>> {\n return this.http.get<PodFormResponse<PodFormItem>>(`/responses/all/${id}`, {\n ...options,\n next: this.revalidate ? { revalidate: this.revalidate, ...(options?.next || {}) } : options?.next,\n });\n }\n}\n\nexport * from './types';\n","import { NextHttp, createNextHttp } from '@rezamirzapour/http';\nimport type { SendSmsParams, SendSmsResponse } from './types';\n\nexport interface NotificationServiceOptions {\n baseUrl: string;\n apiToken: string;\n}\n\nexport class NotificationService {\n private http: NextHttp;\n private apiToken: string;\n\n constructor(options: NotificationServiceOptions) {\n this.apiToken = options.apiToken || '';\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-Notification',\n headers: {\n apiToken: this.apiToken,\n },\n });\n }\n\n /**\n * Sends an SMS notification to one or multiple mobile numbers.\n */\n public async sendSms(params: SendSmsParams): Promise<SendSmsResponse> {\n const payload = {\n content: {\n content: params.content,\n mobileNumbers: params.mobileNumbers,\n receiverType: 'MOBILE',\n },\n };\n\n return this.http.post<SendSmsResponse>('/service/sms', payload);\n }\n}\n\nexport * from './types';\n","import { NextHttp, createNextHttp, RequestOptions } from '@rezamirzapour/http';\nimport type {\n GetCommentListParams,\n AddCommentParams,\n LikeCommentParams,\n LikePostParams,\n SocialResponse,\n CommentItem,\n} from './types';\n\nexport interface SocialServiceOptions {\n baseUrl: string;\n apiToken: string;\n revalidate?: number | string;\n}\n\nexport class SocialService {\n private http: NextHttp;\n private apiToken: string;\n private revalidate: number;\n\n constructor(options: SocialServiceOptions) {\n this.apiToken = options.apiToken || '';\n this.revalidate = Number(options.revalidate) || 0;\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-Social',\n headers: {\n _token_: this.apiToken,\n _token_issuer_: '1',\n },\n });\n }\n\n /**\n * Retrieves comments for a specific post or subject ID.\n */\n public async getCommentList(\n params: GetCommentListParams,\n options?: RequestOptions\n ): Promise<SocialResponse<CommentItem[]>> {\n return this.http.get<SocialResponse<CommentItem[]>>('/srv/core/nzh/commentList', {\n ...options,\n params,\n next: this.revalidate ? { revalidate: this.revalidate, ...(options?.next || {}) } : options?.next,\n });\n }\n\n /**\n * Adds a new comment to a subject.\n */\n public async addComment(params: AddCommentParams): Promise<SocialResponse> {\n return this.http.get<SocialResponse>('/srv/core/nzh/comment', {\n params,\n });\n }\n\n /**\n * Likes or dislikes a comment.\n */\n public async likeComment(params: LikeCommentParams): Promise<SocialResponse> {\n return this.http.get<SocialResponse>('/srv/core/nzh/likeComment', {\n params,\n });\n }\n\n /**\n * Likes or dislikes a post.\n */\n public async likePost(params: LikePostParams): Promise<SocialResponse> {\n return this.http.get<SocialResponse>('/srv/core/nzh/like', {\n params,\n });\n }\n}\n\nexport * from './types';\n","import type {\n FormattedSubject,\n FormattedGetContentResponse,\n MetaContent,\n} from './types';\n\nexport class CmsDataFormatter {\n private podspaceUrl: string;\n\n constructor(podspaceUrl: string = 'https://podspace.pod.ir') {\n this.podspaceUrl = podspaceUrl;\n }\n\n public generateImage(hash?: string, defaultSrc: string = ''): string {\n return hash ? `${this.podspaceUrl}/api/images/${hash}?dl=1` : defaultSrc;\n }\n\n public formatContentItem(\n item: any,\n normalizer?: (item: FormattedSubject) => Record<string, any>\n ): any {\n if (typeof item === 'number' || !item || typeof item !== 'object') {\n return item;\n }\n\n const newItem: FormattedSubject = {\n ...JSON.parse(JSON.stringify(item)),\n formatted: {},\n __normalized: {},\n };\n\n const formatted: Record<string | number, any> = {};\n if (Array.isArray(item?.metadata?.content)) {\n item.metadata.content.forEach((detail: MetaContent) => {\n switch (detail.type) {\n case 'IMAGE_TYPE': {\n formatted[detail.code] = Array.isArray(detail.value)\n ? detail.value.map((v: string) => this.generateImage(v))\n : this.generateImage(detail.value as string);\n break;\n }\n default:\n formatted[detail.code] = detail.value !== undefined ? detail.value : '';\n }\n });\n }\n\n if (Array.isArray(item?.metadata?.content_related)) {\n item.metadata.content_related.forEach((detail: any) => {\n if (detail?.uniqueId && Array.isArray(detail.values)) {\n formatted[detail.uniqueId] = detail.values.map((val: any) =>\n this.formatContentItem(val)\n );\n }\n });\n }\n\n newItem.formatted = formatted;\n if (typeof normalizer === 'function') {\n newItem.__normalized = normalizer(newItem);\n }\n\n return newItem;\n }\n\n public formatGetContentResponse<\n T extends Record<string, any> = Record<string, any>,\n P = {}\n >(\n response: any,\n normalizer?: (item: FormattedSubject) => Record<string, any>\n ): FormattedGetContentResponse<T, P> {\n if (response && Array.isArray(response.result)) {\n const result = response.result.map((item: any) =>\n this.formatContentItem(item, normalizer)\n );\n return {\n ...response,\n result,\n };\n }\n return response || {};\n }\n}\n","import { NextHttp, createNextHttp } from '@rezamirzapour/http';\nimport { CmsDataFormatter } from './formatter';\nimport type {\n GetContentParams,\n GetCategoriesParams,\n GetContentByEntityIdParams,\n GetContentResponse,\n GetCategoryResponse,\n FormattedGetContentResponse,\n AddContentParams,\n TimelineSearchBody,\n TimelineResponse,\n CmsRequestOptions,\n} from './types';\n\nexport interface CmsServiceOptions {\n baseUrl: string;\n clientId: string;\n apiToken?: string;\n podspaceUrl?: string;\n revalidate?: number | string;\n}\n\nexport class CmsService {\n private http: NextHttp;\n private formatter: CmsDataFormatter;\n private clientId: string;\n private apiToken: string;\n private revalidate: number;\n\n constructor(options: CmsServiceOptions) {\n this.clientId = options.clientId || '';\n this.apiToken = options.apiToken || '';\n this.revalidate = Number(options.revalidate) || 0;\n this.formatter = new CmsDataFormatter(options.podspaceUrl || 'https://podspace.pod.ir');\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-CMS',\n });\n }\n\n private get commonHeaders(): Record<string, string> {\n return {\n 'Client-Id': this.clientId,\n 'Content-Type': 'application/json',\n };\n }\n\n private get managingHeaders(): Record<string, string> {\n return {\n ...this.commonHeaders,\n 'Access-Token': this.apiToken,\n };\n }\n\n /**\n * Retrieves enabled published content from CMS, formatted with generic metadata type T and optional normalized type P.\n */\n public async getContent<T extends Record<string, any> = Record<string, any>, P = {}>(\n params: GetContentParams = {},\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const transferParams = {\n size: 50,\n offset: 0,\n showDetail: true,\n ...params,\n };\n\n try {\n const res = await this.http.get<GetContentResponse>('/api/core/contents/enable', {\n params: transferParams,\n headers: {\n ...this.commonHeaders,\n ...(options.headers as any),\n },\n cache: options.cache,\n signal: options.signal,\n next: {\n revalidate: options.revalidate !== undefined ? (options.revalidate === false ? 0 : options.revalidate) : this.revalidate,\n },\n });\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n } catch {\n return { hasError: true, result: [] } as unknown as FormattedGetContentResponse<T, P>;\n }\n }\n\n /**\n * Retrieves content using managing credentials (Access-Token).\n */\n public async getContent2<T extends Record<string, any> = Record<string, any>, P = {}>(\n params: GetContentParams = {},\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const transferParams = {\n size: 50,\n offset: 0,\n showDetail: true,\n ...params,\n };\n\n try {\n const res = await this.http.get<GetContentResponse>('/api/core/contents', {\n params: transferParams,\n headers: {\n ...this.managingHeaders,\n ...(options.headers as any),\n },\n cache: options.cache,\n signal: options.signal,\n next: {\n revalidate: options.revalidate !== undefined ? (options.revalidate === false ? 0 : options.revalidate) : this.revalidate,\n },\n });\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n } catch {\n return { hasError: true, result: [] } as unknown as FormattedGetContentResponse<T, P>;\n }\n }\n\n /**\n * Retrieves unpublished/draft content (enable: false).\n */\n public async getUnpublishedContent<T extends Record<string, any> = Record<string, any>, P = {}>(\n params: GetContentParams = {},\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const transferParams = {\n size: 50,\n offset: 0,\n showDetail: true,\n enable: false,\n ...params,\n };\n\n try {\n const res = await this.http.get<GetContentResponse>('/api/core/contents', {\n params: transferParams,\n headers: {\n ...this.managingHeaders,\n ...(options.headers as any),\n },\n cache: options.cache,\n signal: options.signal,\n next: {\n revalidate: options.revalidate !== undefined ? (options.revalidate === false ? 0 : options.revalidate) : this.revalidate,\n },\n });\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n } catch {\n return { hasError: true, result: [] } as unknown as FormattedGetContentResponse<T, P>;\n }\n }\n\n /**\n * Retrieves single content by entityId and optional contentTypeUniqueId.\n */\n public async getContentByEntityId<T extends Record<string, any> = Record<string, any>, P = {}>(\n params: GetContentByEntityIdParams,\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const url = params.contentTypeUniqueId\n ? `/api/core/contents/${params.contentTypeUniqueId}/enable/${params.entityId}`\n : `/api/core/contents/enable/${params.entityId}`;\n\n try {\n const res = await this.http.get<GetContentResponse>(url, {\n headers: {\n ...this.commonHeaders,\n ...(options.headers as any),\n },\n cache: options.cache,\n signal: options.signal,\n next: {\n revalidate: options.revalidate !== undefined ? (options.revalidate === false ? 0 : options.revalidate) : this.revalidate,\n },\n });\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n } catch {\n return { hasError: true, result: [] } as unknown as FormattedGetContentResponse<T, P>;\n }\n }\n\n /**\n * Retrieves tag/category tree.\n */\n public async getCategories(\n params: GetCategoriesParams = {},\n options: CmsRequestOptions = {}\n ): Promise<GetCategoryResponse> {\n try {\n return await this.http.get<GetCategoryResponse>('/api/core/tags/root/tree/enable', {\n params,\n headers: {\n ...this.commonHeaders,\n ...(options.headers as any),\n },\n cache: options.cache,\n signal: options.signal,\n next: {\n revalidate: options.revalidate !== undefined ? (options.revalidate === false ? 0 : options.revalidate) : this.revalidate,\n },\n });\n } catch {\n return { hasError: true, result: [] } as unknown as GetCategoryResponse;\n }\n }\n\n /**\n * Retrieves details of a content type structure.\n */\n public async getContentTypeDetail(contentTypeUniqueId: string): Promise<any> {\n try {\n return await this.http.get(`/api/core/content-types/${contentTypeUniqueId}`, {\n headers: this.managingHeaders,\n });\n } catch {\n return {};\n }\n }\n\n /**\n * Adds and publishes new content to CMS.\n */\n public async addContent<T extends Record<string, any> = Record<string, any>, P = {}>(\n params: AddContentParams,\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const res = await this.http.post<GetContentResponse>(\n `/api/core/contents/${params.contentTypeUniqueId}/add-publish`,\n params.body,\n {\n headers: this.managingHeaders,\n }\n );\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n }\n\n /**\n * Edits and publishes existing content by entityId.\n */\n public async editContent<T extends Record<string, any> = Record<string, any>, P = {}>(\n entityId: number,\n params: AddContentParams,\n options: CmsRequestOptions = {}\n ): Promise<FormattedGetContentResponse<T, P>> {\n const res = await this.http.post<GetContentResponse>(\n `/api/core/contents/${params.contentTypeUniqueId}/${entityId}/edit-publish`,\n params.body,\n {\n headers: this.managingHeaders,\n }\n );\n\n return this.formatter.formatGetContentResponse<T, P>(res, options.normalizer);\n }\n\n /**\n * Performs advanced AI timeline search.\n */\n public async timelineSearch(query?: TimelineSearchBody): Promise<TimelineResponse> {\n const params: Record<string, any> = {};\n if (query?.advance) {\n params.advance = JSON.stringify(query.advance);\n params.newVersion = true;\n }\n if (query?.offset) {\n params.offset = query.offset;\n }\n\n return this.http.get<TimelineResponse>('/api/core/ai-service/timeline-search/enable', {\n params,\n headers: this.commonHeaders,\n });\n }\n}\n\nexport * from './types';\nexport * from './formatter';\n","import { NextHttp, createNextHttp, RequestOptions } from '@rezamirzapour/http';\nimport type {\n GetInfOfGraduatedByGraduateDateResponse,\n GetSessionClassInCurrentDayResponse,\n} from './types';\n\nexport interface IumsServiceOptions {\n baseUrl: string;\n clientId: string;\n revalidate?: number | string;\n}\n\nexport class IumsService {\n private http: NextHttp;\n private clientId: string;\n private revalidate: number;\n\n constructor(options: IumsServiceOptions) {\n this.clientId = options.clientId || '';\n this.revalidate = Number(options.revalidate) || 0;\n\n this.http = createNextHttp({\n baseUrl: options.baseUrl,\n serviceName: 'POD-IUMS',\n headers: {\n 'Client-Id': this.clientId,\n },\n });\n }\n\n private generateIumsDataPayload(method: string, parameters: (number | string)[] = [], service: string = 'ExternalFacade'): string {\n const paramsString = parameters.length > 0\n ? '[' + parameters.map((v) => `\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"${v}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"`) + ']'\n : null;\n\n return `{\"type\":3,\"content\":\"{\\\\\\\"peerName\\\\\\\":\\\\\\\"khatam_eng_hq\\\\\\\",\\\\\\\"receivers\\\\\\\":[],\\\\\\\"collapseId\\\\\\\":null,\\\\\\\"groupId\\\\\\\":null,\\\\\\\"index\\\\\\\":null,\\\\\\\"messageId\\\\\\\":\\\\\\\"8657270951\\\\\\\",\\\\\\\"ttl\\\\\\\":60000,\\\\\\\"content\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"requestHeader\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\"trackerId\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"token\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"id_token\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"pod_token\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"ssoToken\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"requesterPostId\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"userIds\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"ssoIds\\\\\\\\\\\\\\\":null},\\\\\\\\\\\\\\\"messageType\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"INVOKE_SERVICE\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"processData\\\\\\\\\\\\\\\":[],\\\\\\\\\\\\\\\"content\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"service\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"${service}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"serviceMethod\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"${method}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"parameters\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":${paramsString ?? 'null'},\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"returnedVarType\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"returnedVarJson\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"genericType\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":null}\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"engineName\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"peerId\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\"asyncTracker\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"trackerId\\\\\\\\\\\\\\\":null}\\\\\\\"}\\\",\\\"trackerId\\\":null}`;\n }\n\n private formatIumsResponse(response: { content?: string }): any {\n const content = response?.content;\n if (!content) return response;\n\n try {\n let data = JSON.parse(content);\n if (data?.content) {\n data = JSON.parse(data.content);\n }\n if (data?.returnedVarJson) {\n return JSON.parse(data.returnedVarJson);\n }\n return data;\n } catch {\n return response;\n }\n }\n\n private async request<T = any>(\n serviceMethod: string,\n params: (string | number)[] = [],\n options?: RequestOptions\n ): Promise<T> {\n const dataPayload = this.generateIumsDataPayload(serviceMethod, params);\n\n const response = await this.http.get<{ content?: string }>('/srv', {\n ...options,\n params: { data: dataPayload },\n next: this.revalidate ? { revalidate: this.revalidate, ...(options?.next || {}) } : options?.next,\n });\n\n return this.formatIumsResponse(response) as T;\n }\n\n public async getInfOfGraduatedByGraduateDate(\n startDate: string = '20240521',\n endDate: string = '20250621',\n options?: RequestOptions\n ): Promise<GetInfOfGraduatedByGraduateDateResponse> {\n return this.request<GetInfOfGraduatedByGraduateDateResponse>(\n 'getInfOfGraduatedByGraduateDate3',\n [startDate, endDate],\n options\n );\n }\n\n public async getSessionClassInCurrentDay(options?: RequestOptions): Promise<GetSessionClassInCurrentDayResponse> {\n return this.request<GetSessionClassInCurrentDayResponse>(\n 'getSessionCalssInCurrentDay',\n [],\n options\n );\n }\n\n public async getDetailsOfTermExam(options?: RequestOptions): Promise<any> {\n return this.request('getDetailsOfTermExam', [], options);\n }\n\n public async getStudentInformationByNumber(\n studentNumber: string | number,\n options?: RequestOptions\n ): Promise<any> {\n return this.request('getStudentInformationByNumber', [Number(studentNumber)], options);\n }\n\n public async getStudentInformationByNationalCode(\n nationalCode: string | number,\n options?: RequestOptions\n ): Promise<any> {\n return this.request('getStudentInformationByNationalCode', [Number(nationalCode)], options);\n }\n}\n\nexport * from './types';\n","import { SsoService } from './services/sso';\nimport { CustomPostService, CustomPostCrudService } from './services/customPost';\nimport { PodspaceService } from './services/podspace';\nimport { PodFormService } from './services/podform';\nimport { NotificationService } from './services/notification';\nimport { SocialService } from './services/social';\nimport { CmsService } from './services/cms';\nimport { IumsService } from './services/iums';\nimport type { PodSdkConfig, PodUrlsConfig } from './types';\nimport type { CustomPostCrudConfig } from './services/customPost/types';\n\nexport class PodSdk {\n public readonly sso: SsoService;\n public readonly customPost: CustomPostService;\n public readonly podspace: PodspaceService;\n public readonly podform: PodFormService;\n public readonly notification: NotificationService;\n public readonly social: SocialService;\n public readonly cms: CmsService;\n public readonly iums: IumsService;\n\n constructor(config: PodSdkConfig) {\n const urls: PodUrlsConfig = {\n accounts: 'https://accounts.pod.ir',\n apiPod: 'https://api.pod.ir',\n cms: 'https://cms.pod.ir',\n podspace: 'https://podspace.pod.ir',\n podform: 'https://podform.pod.ir',\n notification: 'https://notification.pod.ir',\n iums: 'https://iums.pod.ir',\n ...config.urls,\n };\n\n const apiToken = config.apiToken || '';\n const clientId = config.clientId || '';\n const clientSecret = config.clientSecret || '';\n const privateKeyPem = config.privateKeyPem || '';\n const revalidate = config.revalidate;\n\n // 1. SSO\n this.sso = new SsoService({\n baseUrl: urls.accounts!,\n clientId,\n clientSecret,\n apiToken,\n privateKeyPem,\n websiteUrl: urls.website,\n revalidate,\n });\n\n // 2. CustomPost\n this.customPost = new CustomPostService({\n baseUrl: urls.apiPod!,\n apiToken,\n revalidate,\n });\n\n // 3. Podspace\n this.podspace = new PodspaceService({\n baseUrl: urls.podspace!,\n apiToken,\n });\n\n // 4. PodForm\n this.podform = new PodFormService({\n baseUrl: urls.podform!,\n apiToken,\n revalidate,\n });\n\n // 5. Notification (SMS)\n this.notification = new NotificationService({\n baseUrl: urls.notification!,\n apiToken,\n });\n\n // 6. Social\n this.social = new SocialService({\n baseUrl: urls.apiPod!,\n apiToken,\n revalidate,\n });\n\n // 7. CMS\n this.cms = new CmsService({\n baseUrl: urls.cms || urls.apiPod!,\n apiToken,\n clientId,\n podspaceUrl: urls.podspace,\n revalidate,\n });\n\n // 8. IUMS\n this.iums = new IumsService({\n baseUrl: urls.iums!,\n clientId,\n revalidate,\n });\n }\n\n /**\n * Helper shortcut to instantiate a Generic CRUD repository for any entity type on POD CustomPost.\n */\n public createCrud<DataType>(config: CustomPostCrudConfig): CustomPostCrudService<DataType> {\n return this.customPost.createCrud<DataType>(config);\n }\n}\n\n/**\n * Factory function to create a new POD SDK instance.\n */\nexport function createPodSdk(config: PodSdkConfig): PodSdk {\n return new PodSdk(config);\n}\n\nexport default PodSdk;\n"]}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@rezamirzapour/pod-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Unified, type-safe enterprise SDK for POD Platform microservices (SSO, CustomPost, Podspace, Podform, Notification, Social, CMS, IUMS) powered by @rezamirzapour/http.",
5
+ "author": "Reza",
6
+ "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.mjs",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "sideEffects": false,
23
+ "scripts": {
24
+ "dev": "tsup --watch",
25
+ "build": "tsup",
26
+ "typecheck": "tsc --noEmit",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest"
29
+ },
30
+ "keywords": [
31
+ "pod",
32
+ "pod-sdk",
33
+ "fanap",
34
+ "dotin",
35
+ "nextjs",
36
+ "sso",
37
+ "podspace",
38
+ "custom-post",
39
+ "notification",
40
+ "typescript"
41
+ ],
42
+ "dependencies": {
43
+ "@rezamirzapour/http": "*",
44
+ "@rezamirzapour/logger": "*"
45
+ },
46
+ "peerDependencies": {
47
+ "next": ">=13.0.0"
48
+ },
49
+ "peerDependenciesMeta": {
50
+ "next": {
51
+ "optional": true
52
+ }
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^22.13.9",
56
+ "tsup": "^8.4.0",
57
+ "typescript": "^5.8.2",
58
+ "vitest": "^3.0.7"
59
+ }
60
+ }