UNPKG

ngx-captcha-kit

Version:

[![npm version](https://badge.fury.io/js/ngx-captcha-kit.svg)](https://www.npmjs.com/package/ngx-captcha-kit) [![npm downloads](https://img.shields.io/npm/dm/ngx-captcha-kit.svg)](https://www.npmjs.com/package/ngx-captcha-kit) [![License: MIT](https://img

1 lines 18.4 kB
{"version":3,"file":"ngx-captcha-kit.mjs","sources":["../../../projects/ngx-captcha-kit/src/lib/captcha.service.ts","../../../projects/ngx-captcha-kit/src/lib/captcha.component.ts","../../../projects/ngx-captcha-kit/src/lib/ngx-captcha-kit.module.ts","../../../projects/ngx-captcha-kit/src/ngx-captcha-kit.ts"],"sourcesContent":["import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CaptchaService {\r\n private scriptLoaded = new Map<string, boolean>();\r\n private readyPromises = new Map<string, Promise<void>>();\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private doc: any,\r\n @Inject(PLATFORM_ID) private platformId: Object\r\n ) {}\r\n\r\n loadScript(url: string, onloadCallbackName?: string, language?: string, asyncLoad: boolean = true): Promise<void> | undefined {\r\n let modifiedUrl = url;\r\n if (language && url.includes('google.com/recaptcha')) {\r\n modifiedUrl += (url.includes('?') ? '&' : '?') + `hl=${language}`;\r\n }\r\n if (this.scriptLoaded.get(modifiedUrl)) return this.readyPromises.get(modifiedUrl);\r\n if (!isPlatformBrowser(this.platformId)) return Promise.resolve();\r\n\r\n const promise = new Promise<void>((resolve) => {\r\n if (onloadCallbackName) {\r\n (window as any)[onloadCallbackName] = () => resolve();\r\n } else {\r\n resolve();\r\n }\r\n });\r\n this.readyPromises.set(modifiedUrl, promise);\r\n\r\n const script = this.doc.createElement('script');\r\n script.src = modifiedUrl;\r\n script.async = asyncLoad;\r\n script.defer = asyncLoad;\r\n script.onload = () => {\r\n this.scriptLoaded.set(modifiedUrl, true);\r\n if (!onloadCallbackName) promise.then(() => {});\r\n };\r\n this.doc.body.appendChild(script);\r\n return promise;\r\n }\r\n\r\n async executeRecaptchaV3(siteKey: string, action: string, language?: string): Promise<string> {\r\n await this.loadScript(`https://www.google.com/recaptcha/api.js?render=${siteKey}`, undefined, language);\r\n await new Promise<void>(resolve => (window as any).grecaptcha.ready(resolve));\r\n return (window as any).grecaptcha.execute(siteKey, { action });\r\n }\r\n\r\n async executeTurnstile(siteKey: string, action?: string, cData?: string): Promise<string> {\r\n await this.loadScript('https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit');\r\n await (window as any).turnstile.ready();\r\n return new Promise((resolve, reject) => {\r\n (window as any).turnstile.render('#turnstile-container', {\r\n sitekey: siteKey,\r\n action: action,\r\n cData: cData,\r\n callback: (token: string) => resolve(token),\r\n 'error-callback': (error: any) => reject(error),\r\n });\r\n });\r\n }\r\n\r\n async executeAlibabaCaptcha(sceneId: string | undefined, options: { mode: 'embed' | 'popup' | 'float' | undefined, element: string, captchaVerifyCallback: (param: any) => void, language?: string }) {\r\n await this.loadScript('https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js');\r\n (window as any).initAliyunCaptcha({\r\n SceneId: sceneId,\r\n mode: options.mode,\r\n element: options.element,\r\n captchaVerifyCallback: options.captchaVerifyCallback,\r\n language: options.language || 'zh',\r\n // 其他選項\r\n });\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, AfterViewInit, ElementRef, OnDestroy } from '@angular/core';\r\nimport { CaptchaService } from './captcha.service';\r\n\r\ntype CaptchaType = 'recaptcha-v2' | 'recaptcha-v3' | 'turnstile' | 'alibaba';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'captcha-kit',\r\n template: `<div [id]=\"containerId\" [class]=\"getClass()\"></div>`,\r\n})\r\nexport class CaptchaComponent implements AfterViewInit, OnDestroy {\r\n @Input() type: CaptchaType | undefined;\r\n @Input() siteKey?: string;\r\n @Input() sceneId?: string;\r\n @Input() prefix?: string; // 新增 for Alibaba\r\n @Input() region?: string = 'cn'; // 新增 for Alibaba, default 'cn'\r\n @Input() action?: string;\r\n @Input() theme?: 'light' | 'dark' | 'auto' = 'light';\r\n @Input() size?: 'normal' | 'compact' | 'invisible' = 'normal';\r\n @Input() mode?: 'embed' | 'popup' | 'float' = 'embed';\r\n @Input() cData?: string;\r\n @Input() language?: string = 'auto';\r\n @Output() resolved = new EventEmitter<string | any>();\r\n @Output() error = new EventEmitter<any>();\r\n\r\n containerId = 'captcha-container';\r\n private widgetId?: string | number;\r\n private isReady = false; // 用於 v3 ready 狀態\r\n\r\n constructor(private captchaService: CaptchaService, private el: ElementRef) {}\r\n\r\n async ngAfterViewInit() {\r\n if (!this.type) {\r\n console.log('Type is required');\r\n this.error.emit('Type is required');\r\n return;\r\n }\r\n\r\n try {\r\n switch (this.type) {\r\n case 'recaptcha-v2':\r\n await this.captchaService.loadScript('https://www.google.com/recaptcha/api.js?render=explicit&onload=ngRecaptchaOnload', 'ngRecaptchaOnload', this.language);\r\n this.widgetId = (window as any).grecaptcha.render(this.el.nativeElement.querySelector('div'), {\r\n sitekey: this.siteKey,\r\n theme: this.theme,\r\n size: this.size,\r\n callback: (token: string) => this.resolved.emit(token),\r\n 'error-callback': (err: any) => this.error.emit(err),\r\n });\r\n break;\r\n case 'recaptcha-v3':\r\n await this.captchaService.loadScript(`https://www.google.com/recaptcha/api.js?render=${this.siteKey}`, undefined, this.language);\r\n await new Promise<void>(resolve => (window as any).grecaptcha.ready(resolve));\r\n this.isReady = true;\r\n break;\r\n\r\n case 'turnstile':\r\n const renderPromise = new Promise<void>((resolve, reject) => {\r\n (window as any).turnstileOnload = () => {\r\n try {\r\n this.widgetId = (window as any).turnstile.render(this.el.nativeElement.querySelector('div'), {\r\n sitekey: this.siteKey,\r\n action: this.action,\r\n cData: this.cData,\r\n theme: this.theme,\r\n language: this.language,\r\n callback: (token: string) => this.resolved.emit(token),\r\n 'error-callback': (err: any) => this.error.emit(err),\r\n });\r\n resolve();\r\n } catch (err) {\r\n reject(err);\r\n }\r\n };\r\n });\r\n await this.captchaService.loadScript('https://challenges.cloudflare.com/turnstile/v0/api.js?onload=turnstileOnload&render=explicit');\r\n await renderPromise;\r\n break;\r\n\r\n case 'alibaba':\r\n if (!this.sceneId || !this.prefix) {\r\n this.error.emit('SceneId and Prefix are required for Alibaba Captcha');\r\n return;\r\n }\r\n\r\n (window as any).AliyunCaptchaConfig = {\r\n region: this.region || 'cn',\r\n prefix: this.prefix,\r\n };\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = 'https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js';\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => resolve();\r\n script.onerror = (err) => reject(err);\r\n document.body.appendChild(script);\r\n });\r\n\r\n if (typeof (window as any).initAliyunCaptcha !== 'function') {\r\n this.error.emit('AliyunCaptcha script loaded but initAliyunCaptcha not defined. Check console for errors.');\r\n return;\r\n }\r\n\r\n (window as any).initAliyunCaptcha({\r\n SceneId: this.sceneId,\r\n prefix: this.prefix,\r\n region: this.region,\r\n mode: this.mode,\r\n element: `#${this.containerId}`,\r\n captchaVerifyCallback: (param: any) => this.resolved.emit(param),\r\n language: this.language,\r\n });\r\n break;\r\n\r\n default:\r\n this.error.emit('Unsupported type');\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n this.error.emit(err);\r\n }\r\n }\r\n\r\n // Public 方法給 v3 手動執行\r\n async execute(): Promise<string> {\r\n if (this.type !== 'recaptcha-v3' || !this.isReady) {\r\n throw new Error('reCAPTCHA v3 not ready or invalid type');\r\n }\r\n const token = await (window as any).grecaptcha.execute(this.siteKey, { action: this.action });\r\n this.resolved.emit(token);\r\n return token;\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.type === 'recaptcha-v2' && this.widgetId !== undefined) {\r\n (window as any).grecaptcha.reset(this.widgetId);\r\n } else if (this.type === 'turnstile' && this.widgetId !== undefined) {\r\n (window as any).turnstile.remove(this.widgetId);\r\n }\r\n }\r\n\r\n public getClass(): string {\r\n return this.type === 'turnstile' ? 'cf-turnstile' : this.type === 'recaptcha-v2' ? 'g-recaptcha' : '';\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CaptchaComponent } from './captcha.component';\r\nimport { CaptchaService } from './captcha.service';\r\n\r\n@NgModule({\r\n declarations: [CaptchaComponent],\r\n exports: [CaptchaComponent],\r\n providers: [CaptchaService]\r\n})\r\nexport class NgxCaptchaKitModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CaptchaService"],"mappings":"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"}