@sparqjs/captcha-runtime 0.2.1 → 0.2.3

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.
@@ -1,4 +1,4 @@
1
- import type { CaptchaCoordinatorLike, CaptchaProof, CaptchaTransport, ChallengeCreateInput, ChallengeView, RuntimeState } from '../types';
1
+ import type { CaptchaCoordinatorLike, CaptchaProof, CaptchaTransport, ChallengeCreateInput, ChallengeView, ChallengeVerifyOutput, RuntimeState } from '../types';
2
2
  export declare class CaptchaRuntimeError extends Error {
3
3
  readonly code: string;
4
4
  constructor(code: string, message?: string);
@@ -9,6 +9,7 @@ export declare class CaptchaCoordinator implements CaptchaCoordinatorLike {
9
9
  private currentView?;
10
10
  private lease?;
11
11
  private response?;
12
+ private verificationToken?;
12
13
  private context?;
13
14
  private binding?;
14
15
  private readonly listeners;
@@ -18,7 +19,10 @@ export declare class CaptchaCoordinator implements CaptchaCoordinatorLike {
18
19
  create(input: ChallengeCreateInput): Promise<ChallengeView>;
19
20
  refresh(): Promise<ChallengeView>;
20
21
  setResponse(response: unknown): void;
22
+ clearResponse(): void;
21
23
  getProof(): CaptchaProof;
24
+ verify(): Promise<ChallengeVerifyOutput>;
25
+ private getRawProof;
22
26
  beginSubmission(): CaptchaProof;
23
27
  cancel(): void;
24
28
  subscribe(listener: (state: RuntimeState) => void): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/core/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,sBAAsB,EAEtB,YAAY,EACZ,gBAAgB,EAEhB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACf,MAAM,UAAU,CAAA;AAEjB,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,OAAO,SAAO;CAK3C;AAED,qBAAa,kBAAmB,YAAW,sBAAsB;IASjD,OAAO,CAAC,QAAQ,CAAC,SAAS;IARtC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,KAAK,CAAC,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAC,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAExC,SAAS,EAAE,gBAAgB;IAExD,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,IAAI,IAAI,aAAa,GAAG,SAAS,CAEpC;IAEK,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsB3D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAoBvC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAMpC,QAAQ,IAAI,YAAY;IAOxB,eAAe,IAAI,YAAY;IAM/B,MAAM,IAAI,IAAI;IAKd,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI;IAM9D,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;CAInB"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/core/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,sBAAsB,EAEtB,YAAY,EAEZ,gBAAgB,EAEhB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,YAAY,EACf,MAAM,UAAU,CAAA;AAEjB,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,OAAO,SAAO;CAK3C;AAED,qBAAa,kBAAmB,YAAW,sBAAsB;IAUjD,OAAO,CAAC,QAAQ,CAAC,SAAS;IATtC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,KAAK,CAAC,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAQ;IAClC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAC,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAExC,SAAS,EAAE,gBAAgB;IAExD,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,IAAI,IAAI,aAAa,GAAG,SAAS,CAEpC;IAEK,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsB3D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAoBvC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAOpC,aAAa,IAAI,IAAI;IAOrB,QAAQ,IAAI,YAAY;IAMlB,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IA+B9C,OAAO,CAAC,WAAW;IAMnB,eAAe,IAAI,YAAY;IAM/B,MAAM,IAAI,IAAI;IAKd,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI;IAM9D,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;CAInB"}
@@ -12,6 +12,7 @@ export class CaptchaCoordinator {
12
12
  currentView;
13
13
  lease;
14
14
  response;
15
+ verificationToken;
15
16
  context;
16
17
  binding;
17
18
  listeners = new Set();
@@ -69,10 +70,59 @@ export class CaptchaCoordinator {
69
70
  setResponse(response) {
70
71
  this.ensureUsable();
71
72
  this.response = response;
73
+ this.verificationToken = undefined;
74
+ this.setState('ready');
75
+ }
76
+ clearResponse() {
77
+ this.ensureUsable();
78
+ this.response = undefined;
79
+ this.verificationToken = undefined;
72
80
  this.setState('ready');
73
81
  }
74
82
  getProof() {
75
83
  this.ensureUsable();
84
+ if (this.verificationToken)
85
+ return { verification_token: this.verificationToken };
86
+ return this.getRawProof();
87
+ }
88
+ async verify() {
89
+ this.ensureUsable();
90
+ if (!this.context)
91
+ throw new CaptchaRuntimeError('challenge_missing', 'challenge context is not available');
92
+ const proof = this.getRawProof();
93
+ this.setState('verifying');
94
+ try {
95
+ const output = await this.transport.verify({
96
+ ...this.context,
97
+ ...proof,
98
+ binding: this.binding,
99
+ issue_receipt: true,
100
+ });
101
+ if (output.status === 'passed') {
102
+ if (!output.receipt?.verification_token)
103
+ throw new CaptchaRuntimeError('receipt_missing', 'verification receipt is not available');
104
+ this.verificationToken = output.receipt.verification_token;
105
+ this.setState('passed');
106
+ return output;
107
+ }
108
+ if (output.challenge)
109
+ this.acceptEnvelope(output.challenge);
110
+ if (output.status === 'failed')
111
+ this.setState('retryable_failed');
112
+ else if (output.status === 'locked')
113
+ this.setState('locked');
114
+ else if (output.status === 'expired')
115
+ this.setState('expired');
116
+ else
117
+ this.setState('unavailable');
118
+ return output;
119
+ }
120
+ catch (error) {
121
+ this.setState('unavailable');
122
+ throw error;
123
+ }
124
+ }
125
+ getRawProof() {
76
126
  if (!this.lease || this.response === undefined)
77
127
  throw new CaptchaRuntimeError('response_missing', 'captcha response is not ready');
78
128
  return { challenge_token: this.lease.challenge_token, response: this.response };
@@ -99,11 +149,13 @@ export class CaptchaCoordinator {
99
149
  this.lease = undefined;
100
150
  this.currentView = undefined;
101
151
  this.response = undefined;
152
+ this.verificationToken = undefined;
102
153
  }
103
154
  acceptEnvelope(envelope) {
104
155
  this.lease = envelope.lease;
105
156
  this.currentView = envelope.view;
106
157
  this.response = undefined;
158
+ this.verificationToken = undefined;
107
159
  }
108
160
  ensureUsable() {
109
161
  if (this.currentState === 'destroyed')
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/core/coordinator.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACjC,IAAI,CAAQ;IAErB,YAAY,IAAY,EAAE,OAAO,GAAG,IAAI;QACpC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;CACJ;AAED,MAAM,OAAO,kBAAkB;IASE;IARrB,YAAY,GAAiB,MAAM,CAAA;IACnC,WAAW,CAAgB;IAC3B,KAAK,CAA6B;IAClC,QAAQ,CAAU;IAClB,OAAO,CAAmB;IAC1B,OAAO,CAAmC;IACjC,SAAS,GAAG,IAAI,GAAG,EAAiC,CAAA;IAErE,YAA6B,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAE5D,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,YAAY,CAAA;IAC5B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,WAAW,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAA2B;QACpC,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG;YACX,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,KAAK,CAAC,eAAe;SACzC,CAAA;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QACzB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACnD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACtB,OAAO,QAAQ,CAAC,IAAI,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;YAC5B,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;YAC5B,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,kCAAkC,CAAC,CAAA;QAC1F,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3B,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC1C,GAAG,IAAI,CAAC,OAAO;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;aAC9C,CAAC,CAAA;YACF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACtB,OAAO,QAAQ,CAAC,IAAI,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;YAC5B,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IAED,WAAW,CAAC,QAAiB;QACzB,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC1C,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,+BAA+B,CAAC,CAAA;QACtF,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnF,CAAC;IAED,eAAe;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3B,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;IAED,SAAS,CAAC,QAAuC;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAChD,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW;YAAE,OAAM;QAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC7B,CAAC;IAEO,cAAc,CAAC,QAA2B;QAC9C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;QAC3B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAA;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;IAC7B,CAAC;IAEO,YAAY;QAChB,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW;YACjC,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAA;IACtF,CAAC;IAEO,QAAQ,CAAC,KAAmB;QAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC1D,CAAC;CACJ"}
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/core/coordinator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-transport.d.ts","sourceRoot":"","sources":["../../src/core/fetch-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,gBAAgB,EAKxB,MAAM,UAAU,CAAA;AAQjB,MAAM,WAAW,4BAA4B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAClC;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,4BAAiC,GAAG,gBAAgB,CAwCxG"}
1
+ {"version":3,"file":"fetch-transport.d.ts","sourceRoot":"","sources":["../../src/core/fetch-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,gBAAgB,EAKxB,MAAM,UAAU,CAAA;AAQjB,MAAM,WAAW,4BAA4B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAClC;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,4BAAiC,GAAG,gBAAgB,CA6CxG"}
@@ -15,6 +15,10 @@ export function createFetchCaptchaTransport(options = {}) {
15
15
  return payload.data;
16
16
  }
17
17
  return {
18
+ initialize: (input) => post('/api/captcha/initialize', {
19
+ contract_version: CAPTCHA_CONTRACT_VERSION,
20
+ ...input,
21
+ }),
18
22
  create: (input) => post('/api/captcha/challenges', {
19
23
  contract_version: CAPTCHA_CONTRACT_VERSION,
20
24
  ...input,
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-transport.js","sourceRoot":"","sources":["../../src/core/fetch-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,wBAAwB,GAM3B,MAAM,UAAU,CAAA;AAajB,MAAM,UAAU,2BAA2B,CAAC,UAAwC,EAAE;IAClF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IAErC,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,IAAa;QAC9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;YAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;QACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,2BAA2B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACpF,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAA;IACvB,CAAC;IAED,OAAO;QACH,MAAM,EAAE,CAAC,KAA2B,EAAE,EAAE,CACpC,IAAI,CAAoB,yBAAyB,EAAE;YAC/C,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;QACN,OAAO,EAAE,CAAC,KAAiG,EAAE,EAAE,CAC3G,IAAI,CAAoB,iCAAiC,EAAE;YACvD,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;QACN,MAAM,EAAE,CACJ,KAIC,EACH,EAAE,CACA,IAAI,CAAwB,qBAAqB,EAAE;YAC/C,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;KACT,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"fetch-transport.js","sourceRoot":"","sources":["../../src/core/fetch-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,wBAAwB,GAO3B,MAAM,UAAU,CAAA;AAajB,MAAM,UAAU,2BAA2B,CAAC,UAAwC,EAAE;IAClF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IAErC,KAAK,UAAU,IAAI,CAAI,IAAY,EAAE,IAAa;QAC9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;YAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;QACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,2BAA2B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACpF,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAA;IACvB,CAAC;IAED,OAAO;QACH,UAAU,EAAE,CAAC,KAA2B,EAAE,EAAE,CACxC,IAAI,CAAwB,yBAAyB,EAAE;YACnD,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;QACN,MAAM,EAAE,CAAC,KAA2B,EAAE,EAAE,CACpC,IAAI,CAAoB,yBAAyB,EAAE;YAC/C,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;QACN,OAAO,EAAE,CAAC,KAAiG,EAAE,EAAE,CAC3G,IAAI,CAAoB,iCAAiC,EAAE;YACvD,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;QACN,MAAM,EAAE,CACJ,KAIC,EACH,EAAE,CACA,IAAI,CAAwB,qBAAqB,EAAE;YAC/C,gBAAgB,EAAE,wBAAwB;YAC1C,GAAG,KAAK;SACX,CAAC;KACT,CAAA;AACL,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ContributionRegistry } from '../core/registry';
2
- import type { CaptchaLayout, CaptchaMountHandle, CaptchaMountOptions, CaptchaProof, CaptchaRenderer, CaptchaTransport } from '../types';
2
+ import type { CaptchaChallengeHandle, CaptchaInitialization, CaptchaLayout, CaptchaMountHandle, CaptchaMountOptions, CaptchaProof, CaptchaRenderer, CaptchaTransport, ChallengeCreateInput } from '../types';
3
3
  export interface CaptchaRuntimeOptions {
4
4
  transport: CaptchaTransport;
5
5
  renderers?: readonly CaptchaRenderer[];
@@ -22,6 +22,8 @@ export interface CaptchaFormOptions extends Omit<CaptchaMountOptions, 'target'>
22
22
  export interface CaptchaRuntime {
23
23
  readonly renderers: ContributionRegistry<CaptchaRenderer>;
24
24
  readonly layouts: ContributionRegistry<CaptchaLayout>;
25
+ initialize(input: ChallengeCreateInput): Promise<CaptchaInitialization>;
26
+ createChallenge(input: ChallengeCreateInput): Promise<CaptchaChallengeHandle>;
25
27
  mount(options: CaptchaMountOptions): Promise<CaptchaMountHandle>;
26
28
  guard(options: CaptchaActionOptions): Promise<void>;
27
29
  bindAction(element: HTMLElement, options: CaptchaActionOptions): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/dom/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAGvD,OAAO,KAAK,EACR,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAEnB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,gBAAgB,CAAA;IAC3B,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IACtC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IAClC,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACzC;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC7E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC3E,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACjF;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACrD,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChE,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IAC3E,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;CAC3E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA+PnF"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/dom/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAGvD,OAAO,KAAK,EACR,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EAEvB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,gBAAgB,CAAA;IAC3B,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IACtC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IAClC,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACzC;AAED,MAAM,WAAW,qBAAqB;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC7E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC3E,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACjF;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAA;IACzD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAA;IACrD,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACvE,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAC7E,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChE,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IAC3E,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;CAC3E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAuVnF"}
@@ -25,9 +25,47 @@ export function createCaptchaRuntime(options) {
25
25
  if (!renderers.resolve(key, version))
26
26
  renderers.install(renderer);
27
27
  }
28
+ async function createChallenge(input) {
29
+ const coordinator = new CaptchaCoordinator(options.transport);
30
+ try {
31
+ await coordinator.create(input);
32
+ }
33
+ catch (error) {
34
+ coordinator.destroy();
35
+ throw error;
36
+ }
37
+ return {
38
+ get state() {
39
+ return coordinator.state;
40
+ },
41
+ get view() {
42
+ return coordinator.view;
43
+ },
44
+ refresh: () => coordinator.refresh(),
45
+ verify: () => coordinator.verify(),
46
+ setResponse: (response) => coordinator.setResponse(response),
47
+ clearResponse: () => coordinator.clearResponse(),
48
+ getProof: () => coordinator.getProof(),
49
+ beginSubmission: () => coordinator.beginSubmission(),
50
+ cancel: () => coordinator.cancel(),
51
+ subscribe: (listener) => coordinator.subscribe(listener),
52
+ destroy: () => coordinator.destroy(),
53
+ };
54
+ }
55
+ function initialize(input) {
56
+ return options.transport.initialize(input);
57
+ }
28
58
  async function mount(mountOptions) {
29
59
  const coordinator = new CaptchaCoordinator(options.transport);
30
- const view = await coordinator.create(mountOptions);
60
+ const view = await coordinator.create({
61
+ scene: mountOptions.scene,
62
+ action: mountOptions.action,
63
+ mode: mountOptions.mode,
64
+ locale: mountOptions.locale,
65
+ idempotency_key: mountOptions.idempotency_key,
66
+ binding: mountOptions.binding,
67
+ challenge_types: mountOptions.challenge_types,
68
+ });
31
69
  const layoutKey = mountOptions.layout ?? (mountOptions.mode === 'modal' ? modalLayout.key : inlineLayout.key);
32
70
  const layout = layouts.resolve(layoutKey);
33
71
  if (!layout || !layout.modes.includes(mountOptions.mode)) {
@@ -53,14 +91,54 @@ export function createCaptchaRuntime(options) {
53
91
  let rendererKey;
54
92
  let rendererVersion;
55
93
  let destroyMount = () => undefined;
94
+ let verificationPending = false;
56
95
  const submitPromise = new Promise((resolve, reject) => {
57
96
  resolveSubmit = resolve;
58
97
  rejectSubmit = reject;
59
98
  });
60
99
  void submitPromise.catch(() => undefined);
100
+ async function updateRenderer(nextView) {
101
+ context.view = nextView;
102
+ if (rendererKey === nextView.renderer.key && rendererVersion === nextView.renderer.version) {
103
+ await rendererHandle?.update(nextView);
104
+ }
105
+ else if (rendererContainer) {
106
+ await ensureRenderer(nextView.renderer.key, nextView.renderer.version);
107
+ rendererHandle?.destroy();
108
+ rendererContainer.replaceChildren();
109
+ context.mountRenderer(rendererContainer);
110
+ }
111
+ layoutHandle?.update(context);
112
+ }
113
+ async function verifyCompletedResponse() {
114
+ if (destroyed || verificationPending)
115
+ return;
116
+ verificationPending = true;
117
+ try {
118
+ const output = await coordinator.verify();
119
+ if (output.challenge)
120
+ await updateRenderer(output.challenge.view);
121
+ if (output.status === 'passed')
122
+ resolveSubmit?.(coordinator.getProof());
123
+ else if (output.status === 'failed' || output.status === 'invalid')
124
+ mountOptions.onError?.(new CaptchaRuntimeError('response_rejected', 'captcha verification failed'));
125
+ else if (output.status === 'locked' || output.status === 'expired')
126
+ rejectSubmit?.(new CaptchaRuntimeError(output.status));
127
+ else
128
+ mountOptions.onError?.(new CaptchaRuntimeError('unavailable', 'captcha is unavailable'));
129
+ }
130
+ catch (error) {
131
+ // 网络或 Provider 暂时不可用时保留弹窗,用户仍可刷新或取消。
132
+ mountOptions.onError?.(asCaptchaError(error));
133
+ }
134
+ finally {
135
+ verificationPending = false;
136
+ }
137
+ }
61
138
  const context = {
62
139
  view,
63
140
  state: coordinator.state,
141
+ submission: mountOptions.submission ?? 'layout',
64
142
  mountRenderer(container) {
65
143
  const currentView = coordinator.view ?? context.view;
66
144
  const renderer = renderers.resolve(currentView.renderer.key, currentView.renderer.version);
@@ -71,8 +149,11 @@ export function createCaptchaRuntime(options) {
71
149
  rendererVersion = currentView.renderer.version;
72
150
  rendererHandle = renderer.mount(container, currentView, {
73
151
  completed: () => {
74
- if (!destroyed && rendererHandle)
152
+ if (!destroyed && rendererHandle) {
75
153
  coordinator.setResponse(rendererHandle.getResponse());
154
+ if (context.submission === 'verification')
155
+ void verifyCompletedResponse();
156
+ }
76
157
  },
77
158
  changed: () => {
78
159
  if (!destroyed && rendererHandle)
@@ -82,25 +163,26 @@ export function createCaptchaRuntime(options) {
82
163
  if (!destroyed)
83
164
  rejectSubmit?.(error);
84
165
  },
166
+ refresh: context.refresh,
85
167
  });
86
168
  },
87
169
  refresh: async () => {
88
- const nextView = await coordinator.refresh();
89
- context.view = nextView;
90
- if (rendererKey === nextView.renderer.key && rendererVersion === nextView.renderer.version) {
91
- await rendererHandle?.update(nextView);
170
+ try {
171
+ const nextView = await coordinator.refresh();
172
+ await updateRenderer(nextView);
92
173
  }
93
- else if (rendererContainer) {
94
- await ensureRenderer(nextView.renderer.key, nextView.renderer.version);
95
- rendererHandle?.destroy();
96
- rendererContainer.replaceChildren();
97
- context.mountRenderer(rendererContainer);
174
+ catch (error) {
175
+ mountOptions.onError?.(asCaptchaError(error));
176
+ throw error;
98
177
  }
99
- layoutHandle?.update(context);
100
178
  },
101
179
  retry: () => undefined,
102
180
  submit: async () => {
103
181
  try {
182
+ if (context.submission === 'verification') {
183
+ await verifyCompletedResponse();
184
+ return;
185
+ }
104
186
  const proof = coordinator.beginSubmission();
105
187
  resolveSubmit?.(proof);
106
188
  }
@@ -141,6 +223,12 @@ export function createCaptchaRuntime(options) {
141
223
  return {
142
224
  coordinator,
143
225
  refresh: context.refresh,
226
+ verify: async () => {
227
+ const output = await coordinator.verify();
228
+ if (output.challenge)
229
+ await updateRenderer(output.challenge.view);
230
+ return output;
231
+ },
144
232
  submit: () => submitPromise,
145
233
  getProof: () => coordinator.getProof(),
146
234
  destroy: destroyMount,
@@ -215,6 +303,9 @@ export function createCaptchaRuntime(options) {
215
303
  await formOptions.execute(proof, form);
216
304
  return;
217
305
  }
306
+ if ('verification_token' in proof) {
307
+ throw new CaptchaRuntimeError('submit_handler_missing', 'verification receipt requires fetch form submission');
308
+ }
218
309
  const token = document.createElement('input');
219
310
  token.type = 'hidden';
220
311
  token.name = 'captcha_token';
@@ -260,7 +351,10 @@ export function createCaptchaRuntime(options) {
260
351
  pendingHandle = undefined;
261
352
  };
262
353
  }
263
- return { renderers, layouts, mount, guard, bindAction, bindForm };
354
+ return { renderers, layouts, initialize, createChallenge, mount, guard, bindAction, bindForm };
355
+ }
356
+ function asCaptchaError(error) {
357
+ return error instanceof Error ? error : new CaptchaRuntimeError('unavailable', 'captcha is unavailable');
264
358
  }
265
359
  function sameBinding(left, right) {
266
360
  if (left === right)
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/dom/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/dom/runtime.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
- import type { CaptchaLayout } from '../types';
1
+ import type { CaptchaLayout, RuntimeState } from '../types';
2
+ type CaptchaIconName = 'refresh' | 'close';
3
+ export declare function captchaIconPathData(name: CaptchaIconName): readonly string[];
4
+ export declare function captchaStatusText(state: RuntimeState): string;
2
5
  export declare const inlineLayout: CaptchaLayout;
3
6
  export declare const modalLayout: CaptchaLayout;
7
+ export {};
4
8
  //# sourceMappingURL=basic-layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic-layout.d.ts","sourceRoot":"","sources":["../../src/host/basic-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,UAAU,CAAA;AAkHjF,eAAO,MAAM,YAAY,eAA6C,CAAA;AACtE,eAAO,MAAM,WAAW,eAA2C,CAAA"}
1
+ {"version":3,"file":"basic-layout.d.ts","sourceRoot":"","sources":["../../src/host/basic-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsC,YAAY,EAAE,MAAM,UAAU,CAAA;AAI/F,KAAK,eAAe,GAAG,SAAS,GAAG,OAAO,CAAA;AAO1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CAE5E;AAkBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI7D;AA6HD,eAAO,MAAM,YAAY,eAA6C,CAAA;AACtE,eAAO,MAAM,WAAW,eAA2C,CAAA"}
@@ -1,4 +1,33 @@
1
1
  let layoutSequence = 0;
2
+ const captchaIconPaths = {
3
+ refresh: ['M20 11a8 8 0 1 0-2.34 5.66', 'M20 4v7h-7'],
4
+ close: ['M18 6 6 18', 'M6 6 18 18'],
5
+ };
6
+ export function captchaIconPathData(name) {
7
+ return captchaIconPaths[name];
8
+ }
9
+ function createCaptchaIcon(name) {
10
+ const namespace = 'http://www.w3.org/2000/svg';
11
+ const icon = document.createElementNS(namespace, 'svg');
12
+ icon.classList.add('sparq-captcha-modal__icon');
13
+ icon.setAttribute('viewBox', '0 0 24 24');
14
+ icon.setAttribute('aria-hidden', 'true');
15
+ icon.setAttribute('focusable', 'false');
16
+ icon.setAttribute('data-captcha-icon', name);
17
+ for (const data of captchaIconPathData(name)) {
18
+ const path = document.createElementNS(namespace, 'path');
19
+ path.setAttribute('d', data);
20
+ icon.append(path);
21
+ }
22
+ return icon;
23
+ }
24
+ export function captchaStatusText(state) {
25
+ if (state === 'verifying')
26
+ return '正在验证…';
27
+ if (state === 'passed')
28
+ return '验证通过';
29
+ return '';
30
+ }
2
31
  function focusableElements(root) {
3
32
  return Array.from(root.querySelectorAll('button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])'));
4
33
  }
@@ -22,7 +51,27 @@ function createLayout(key, modal) {
22
51
  }
23
52
  const title = document.createElement('h2');
24
53
  title.id = titleID;
25
- title.textContent = 'Verify you are human';
54
+ title.textContent = '请完成人机验证';
55
+ const header = document.createElement('header');
56
+ header.className = 'sparq-captcha-modal__header';
57
+ const headerActions = document.createElement('div');
58
+ headerActions.className = 'sparq-captcha-modal__actions';
59
+ const refresh = document.createElement('button');
60
+ refresh.type = 'button';
61
+ refresh.className = 'sparq-captcha-modal__icon-button';
62
+ refresh.setAttribute('aria-label', '刷新验证码');
63
+ refresh.title = '刷新验证码';
64
+ refresh.append(createCaptchaIcon('refresh'));
65
+ refresh.addEventListener('click', () => void context.refresh().catch(() => undefined));
66
+ const close = document.createElement('button');
67
+ close.type = 'button';
68
+ close.className = 'sparq-captcha-modal__icon-button';
69
+ close.setAttribute('aria-label', '关闭验证码');
70
+ close.title = '关闭验证码';
71
+ close.append(createCaptchaIcon('close'));
72
+ close.addEventListener('click', context.cancel);
73
+ headerActions.append(refresh, close);
74
+ header.append(title, headerActions);
26
75
  const challenge = document.createElement('div');
27
76
  challenge.className = 'sparq-captcha-challenge';
28
77
  const status = document.createElement('p');
@@ -30,42 +79,35 @@ function createLayout(key, modal) {
30
79
  status.setAttribute('role', 'status');
31
80
  status.setAttribute('aria-live', 'polite');
32
81
  const actions = document.createElement('div');
33
- const refresh = document.createElement('button');
34
- refresh.type = 'button';
35
- refresh.textContent = 'Refresh';
36
- refresh.addEventListener('click', () => {
37
- void context.refresh().catch(() => {
38
- status.textContent = 'Challenge could not be refreshed.';
39
- });
40
- });
41
82
  const submit = document.createElement('button');
42
83
  submit.type = 'button';
43
- submit.textContent = 'Continue';
84
+ submit.className = 'sparq-captcha-submit';
85
+ submit.textContent = '继续';
44
86
  submit.addEventListener('click', () => void context.submit());
45
- actions.append(refresh, submit);
46
- if (modal) {
47
- const cancel = document.createElement('button');
48
- cancel.type = 'button';
49
- cancel.textContent = 'Cancel';
50
- cancel.addEventListener('click', context.cancel);
51
- actions.append(cancel);
52
- }
53
- surface.append(title, challenge, status, actions);
87
+ if (context.submission === 'layout')
88
+ actions.append(submit);
89
+ if (modal)
90
+ surface.append(header);
91
+ surface.append(challenge, status);
92
+ if (actions.childElementCount > 0)
93
+ surface.append(actions);
54
94
  root.append(surface);
55
95
  container.append(root);
56
96
  context.mountRenderer(challenge);
57
97
  const unsubscribe = context.subscribe((state) => {
58
98
  context.state = state;
59
- const busy = state === 'refreshing' || state === 'submitting';
99
+ const busy = state === 'refreshing' || state === 'submitting' || state === 'verifying';
100
+ const challengeLocked = busy || state === 'passed' || state === 'locked' || state === 'expired';
60
101
  surface.setAttribute('aria-busy', String(busy));
61
- refresh.disabled = busy;
62
102
  submit.disabled = busy;
63
- if (state === 'refreshing')
64
- status.textContent = 'Refreshing challenge.';
65
- else if (state === 'unavailable')
66
- status.textContent = 'Challenge is temporarily unavailable.';
67
- else if (state === 'ready')
68
- status.textContent = '';
103
+ refresh.disabled = busy || state === 'passed';
104
+ close.disabled = state === 'passed';
105
+ challenge.toggleAttribute('inert', challengeLocked);
106
+ surface.classList.toggle('is-verifying', state === 'verifying');
107
+ surface.classList.toggle('is-passed', state === 'passed');
108
+ surface.classList.toggle('is-failed', state === 'retryable_failed');
109
+ refresh.classList.toggle('is-refreshing', state === 'refreshing');
110
+ status.textContent = captchaStatusText(state);
69
111
  });
70
112
  const onKeyDown = (event) => {
71
113
  if (!modal)
@@ -1 +1 @@
1
- {"version":3,"file":"basic-layout.js","sourceRoot":"","sources":["../../src/host/basic-layout.ts"],"names":[],"mappings":"AAEA,IAAI,cAAc,GAAG,CAAC,CAAA;AAEtB,SAAS,iBAAiB,CAAC,IAAiB;IACxC,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,gBAAgB,CACjB,2IAA2I,CAC9I,CACJ,CAAA;AACL,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,KAAc;IAC7C,OAAO;QACH,GAAG;QACH,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrC,KAAK,CAAC,SAAsB,EAAE,OAAsB;YAChD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,YAAY,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5G,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,2BAA2B,CAAA;YAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YACjD,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAA;YAC1E,MAAM,OAAO,GAAG,uBAAuB,EAAE,cAAc,EAAE,CAAA;YACzD,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;gBACtC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;gBAC1C,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;gBAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;YACzB,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAC1C,KAAK,CAAC,EAAE,GAAG,OAAO,CAAA;YAClB,KAAK,CAAC,WAAW,GAAG,sBAAsB,CAAA;YAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC/C,SAAS,CAAC,SAAS,GAAG,yBAAyB,CAAA;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YAC1C,MAAM,CAAC,SAAS,GAAG,sBAAsB,CAAA;YACzC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACrC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAChD,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAA;YACvB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAA;YAC/B,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC9B,MAAM,CAAC,WAAW,GAAG,mCAAmC,CAAA;gBAC5D,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;YACtB,MAAM,CAAC,WAAW,GAAG,UAAU,CAAA;YAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAC7D,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;gBAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;gBACtB,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAA;gBAC7B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBAChD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC1B,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACjD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACpB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACtB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YAEhC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;gBACrB,MAAM,IAAI,GAAG,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,YAAY,CAAA;gBAC7D,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC/C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA;gBACvB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;gBACtB,IAAI,KAAK,KAAK,YAAY;oBAAE,MAAM,CAAC,WAAW,GAAG,uBAAuB,CAAA;qBACnE,IAAI,KAAK,KAAK,aAAa;oBAAE,MAAM,CAAC,WAAW,GAAG,uCAAuC,CAAA;qBACzF,IAAI,KAAK,KAAK,OAAO;oBAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAA;YACvD,CAAC,CAAC,CAAA;YACF,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,EAAE;gBACvC,IAAI,CAAC,KAAK;oBAAE,OAAM;gBAClB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACzB,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAO,CAAC,MAAM,EAAE,CAAA;oBAChB,OAAM;gBACV,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;oBAAE,OAAM;gBAC/B,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;gBAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,OAAO,CAAC,KAAK,EAAE,CAAA;oBACf,OAAM;gBACV,CAAC;gBACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;gBAC1B,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC5C,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;oBACrD,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,IAAI,CAAC,KAAK,EAAE,CAAA;gBAChB,CAAC;qBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAC5D,KAAK,CAAC,cAAc,EAAE,CAAA;oBACtB,KAAK,CAAC,KAAK,EAAE,CAAA;gBACjB,CAAC;YACL,CAAC,CAAA;YACD,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAC9C,IAAI,KAAK;gBAAE,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YACnF,OAAO;gBACH,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;gBACvB,OAAO,EAAE,GAAG,EAAE;oBACV,WAAW,EAAE,CAAA;oBACb,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;oBACjD,IAAI,CAAC,MAAM,EAAE,CAAA;oBACb,IAAI,KAAK,IAAI,iBAAiB,EAAE,WAAW;wBAAE,iBAAiB,CAAC,KAAK,EAAE,CAAA;gBAC1E,CAAC;aACJ,CAAA;QACL,CAAC;KACJ,CAAA;AACL,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"basic-layout.js","sourceRoot":"","sources":["../../src/host/basic-layout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-text-renderer.d.ts","sourceRoot":"","sources":["../../src/host/image-text-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,UAAU,CAAA;AAExG,eAAO,MAAM,iBAAiB,EAAE,eAmC/B,CAAA"}
1
+ {"version":3,"file":"image-text-renderer.d.ts","sourceRoot":"","sources":["../../src/host/image-text-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,UAAU,CAAA;AAExG,eAAO,MAAM,iBAAiB,EAAE,eA0D/B,CAAA"}
@@ -4,17 +4,24 @@ export const imageTextRenderer = {
4
4
  mount(container, view, callbacks) {
5
5
  const wrapper = document.createElement('div');
6
6
  wrapper.className = 'sparq-captcha-image-text';
7
- const image = document.createElement('img');
8
- image.alt = typeof view.presentation?.alt === 'string' ? view.presentation.alt : 'Image challenge';
9
- image.decoding = 'async';
10
7
  const input = document.createElement('input');
11
8
  input.type = 'text';
12
9
  input.inputMode = 'numeric';
13
10
  input.autocomplete = 'off';
14
11
  input.maxLength = 5;
15
- input.setAttribute('aria-label', 'Challenge answer');
16
- wrapper.append(image, input);
12
+ input.setAttribute('aria-label', '验证码');
13
+ const imageButton = document.createElement('button');
14
+ imageButton.type = 'button';
15
+ imageButton.className = 'sparq-captcha-image-button';
16
+ imageButton.setAttribute('aria-label', '刷新验证码');
17
+ imageButton.title = '点击刷新验证码';
18
+ const image = document.createElement('img');
19
+ image.alt = typeof view.presentation?.alt === 'string' ? view.presentation.alt : '验证码图片';
20
+ image.decoding = 'async';
21
+ imageButton.append(image);
22
+ wrapper.append(input, imageButton);
17
23
  container.append(wrapper);
24
+ let refreshing = false;
18
25
  const updateImage = (nextView) => {
19
26
  const source = nextView.presentation?.image;
20
27
  if (typeof source !== 'string') {
@@ -26,6 +33,23 @@ export const imageTextRenderer = {
26
33
  };
27
34
  input.addEventListener('input', () => callbacks.changed());
28
35
  input.addEventListener('change', () => callbacks.completed());
36
+ imageButton.addEventListener('click', () => {
37
+ if (refreshing)
38
+ return;
39
+ refreshing = true;
40
+ imageButton.disabled = true;
41
+ imageButton.classList.add('is-refreshing');
42
+ imageButton.setAttribute('aria-busy', 'true');
43
+ void callbacks
44
+ .refresh()
45
+ .catch(() => undefined)
46
+ .finally(() => {
47
+ refreshing = false;
48
+ imageButton.disabled = false;
49
+ imageButton.classList.remove('is-refreshing');
50
+ imageButton.removeAttribute('aria-busy');
51
+ });
52
+ });
29
53
  updateImage(view);
30
54
  return {
31
55
  getResponse: () => ({ answer: input.value }),
@@ -1 +1 @@
1
- {"version":3,"file":"image-text-renderer.js","sourceRoot":"","sources":["../../src/host/image-text-renderer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAC9C,GAAG,EAAE,yBAAyB;IAC9B,OAAO,EAAE,CAAC;IACV,KAAK,CAAC,SAAsB,EAAE,IAAmB,EAAE,SAA4B;QAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7C,OAAO,CAAC,SAAS,GAAG,0BAA0B,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC3C,KAAK,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAA;QAClG,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAA;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC7C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAA;QACnB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;QAC3B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAA;QAC1B,KAAK,CAAC,SAAS,GAAG,CAAC,CAAA;QACnB,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACzB,MAAM,WAAW,GAAG,CAAC,QAAuB,EAAE,EAAE;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;YAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBACnD,OAAM;YACV,CAAC;YACD,KAAK,CAAC,GAAG,GAAG,MAAM,CAAA;YAClB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAA;QACpB,CAAC,CAAA;QACD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;QAC1D,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAA;QAC7D,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO;YACH,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;SAClC,CAAA;IACL,CAAC;CACJ,CAAA"}
1
+ {"version":3,"file":"image-text-renderer.js","sourceRoot":"","sources":["../../src/host/image-text-renderer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  export type ChallengeType = 'image_text' | 'image_select' | 'question_answer' | 'slider' | 'rotate' | 'external_widget' | 'external_risk';
2
2
  export type ChallengeMode = 'inline' | 'modal';
3
+ export type CaptchaSubmission = 'layout' | 'external' | 'verification';
3
4
  export type ChallengeOperation = 'create' | 'refresh' | 'verify';
4
5
  export declare const CAPTCHA_CONTRACT_VERSION = "captcha.v1";
5
6
  export type ChallengeStatus = 'passed' | 'failed' | 'expired' | 'locked' | 'invalid' | 'provider_unavailable' | 'operation_not_supported' | 'renderer_unavailable' | 'cancelled';
6
- export type RuntimeState = 'idle' | 'creating' | 'rendering' | 'ready' | 'submitting' | 'failed' | 'retryable_failed' | 'refreshing' | 'expired' | 'locked' | 'unavailable' | 'passed' | 'cancelled' | 'destroyed';
7
+ export type RuntimeState = 'idle' | 'creating' | 'rendering' | 'ready' | 'verifying' | 'submitting' | 'failed' | 'retryable_failed' | 'refreshing' | 'expired' | 'locked' | 'unavailable' | 'passed' | 'cancelled' | 'destroyed';
7
8
  export interface ChallengeContext {
8
9
  scene: string;
9
10
  action: string;
@@ -28,15 +29,25 @@ export interface ChallengeView {
28
29
  }
29
30
  export interface ChallengeCreateInput extends ChallengeContext {
30
31
  binding?: Readonly<Record<string, string>>;
32
+ challenge_types?: ChallengeType[];
31
33
  }
34
+ export interface SceneRequirement {
35
+ required: boolean;
36
+ challenge_types?: ChallengeType[];
37
+ }
38
+ export type CaptchaInitialization = SceneRequirement;
32
39
  export interface ChallengeEnvelope {
33
40
  lease: ChallengeLease;
34
41
  view: ChallengeView;
35
42
  }
36
- export interface CaptchaProof {
43
+ export interface CaptchaRawProof {
37
44
  challenge_token: string;
38
45
  response: unknown;
39
46
  }
47
+ export interface CaptchaVerificationProof {
48
+ verification_token: string;
49
+ }
50
+ export type CaptchaProof = CaptchaRawProof | CaptchaVerificationProof;
40
51
  export interface ChallengeFailure {
41
52
  reason: string;
42
53
  next_action: 'retry_response' | 'refresh_challenge' | 'recreate_challenge' | 'retry_later' | 'abort';
@@ -46,21 +57,28 @@ export interface ChallengeVerifyOutput {
46
57
  status: ChallengeStatus;
47
58
  failure?: ChallengeFailure;
48
59
  challenge?: ChallengeEnvelope;
60
+ receipt?: {
61
+ verification_token: string;
62
+ expires_at: string;
63
+ };
49
64
  }
50
65
  export interface CaptchaTransport {
66
+ initialize(input: ChallengeCreateInput): Promise<CaptchaInitialization>;
51
67
  create(input: ChallengeCreateInput): Promise<ChallengeEnvelope>;
52
68
  refresh(input: ChallengeContext & {
53
69
  challenge_token: string;
54
70
  binding?: Readonly<Record<string, string>>;
55
71
  }): Promise<ChallengeEnvelope>;
56
- verify(input: ChallengeContext & CaptchaProof & {
72
+ verify(input: ChallengeContext & CaptchaRawProof & {
57
73
  binding?: Readonly<Record<string, string>>;
74
+ issue_receipt?: boolean;
58
75
  }): Promise<ChallengeVerifyOutput>;
59
76
  }
60
77
  export interface RendererCallbacks {
61
78
  completed(): void;
62
79
  changed(): void;
63
80
  failed(error: Error): void;
81
+ refresh(): Promise<void>;
64
82
  }
65
83
  export interface CaptchaRendererHandle {
66
84
  getResponse(): unknown;
@@ -75,6 +93,7 @@ export interface CaptchaRenderer {
75
93
  export interface LayoutContext {
76
94
  view: ChallengeView;
77
95
  state: RuntimeState;
96
+ submission: CaptchaSubmission;
78
97
  mountRenderer(container: HTMLElement): void;
79
98
  refresh(): Promise<void>;
80
99
  retry(): void;
@@ -96,20 +115,39 @@ export interface CaptchaMountOptions extends ChallengeContext {
96
115
  target: HTMLElement;
97
116
  layout?: string;
98
117
  binding?: Readonly<Record<string, string>>;
118
+ submission?: CaptchaSubmission;
119
+ challenge_types?: ChallengeType[];
120
+ onError?: (error: Error) => void;
99
121
  }
100
122
  export interface CaptchaMountHandle {
101
123
  readonly coordinator: CaptchaCoordinatorLike;
102
124
  refresh(): Promise<void>;
125
+ verify(): Promise<ChallengeVerifyOutput>;
103
126
  submit(): Promise<CaptchaProof>;
104
127
  getProof(): CaptchaProof;
105
128
  destroy(): void;
106
129
  }
130
+ export interface CaptchaChallengeHandle {
131
+ readonly state: RuntimeState;
132
+ readonly view: ChallengeView | undefined;
133
+ refresh(): Promise<ChallengeView>;
134
+ verify(): Promise<ChallengeVerifyOutput>;
135
+ setResponse(response: unknown): void;
136
+ clearResponse(): void;
137
+ getProof(): CaptchaProof;
138
+ beginSubmission(): CaptchaProof;
139
+ cancel(): void;
140
+ subscribe(listener: (state: RuntimeState) => void): () => void;
141
+ destroy(): void;
142
+ }
107
143
  export interface CaptchaCoordinatorLike {
108
144
  readonly state: RuntimeState;
109
145
  readonly view?: ChallengeView;
110
146
  create(input: ChallengeCreateInput): Promise<ChallengeView>;
111
147
  refresh(): Promise<ChallengeView>;
148
+ verify(): Promise<ChallengeVerifyOutput>;
112
149
  setResponse(response: unknown): void;
150
+ clearResponse(): void;
113
151
  getProof(): CaptchaProof;
114
152
  beginSubmission(): CaptchaProof;
115
153
  cancel(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparqjs/captcha-runtime",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/style.css CHANGED
@@ -1,5 +1,10 @@
1
1
  .sparq-captcha-runtime {
2
- color: #1f2937;
2
+ /*
3
+ * 宿主通过 --sparq-captcha-color-*、radius、shadow 和 focus 映射自身主题。
4
+ * control-height 与 image-width 控制各 Renderer 共用的尺寸节奏;inline-* 只调整内联容器结构。
5
+ * 每个使用点都保留独立运行时的默认值,使变量能够从 Shadow DOM 宿主继承而不被本层覆盖。
6
+ */
7
+ color: var(--sparq-captcha-color-text, #1f2937);
3
8
  font-family: system-ui, sans-serif;
4
9
  font-size: 14px;
5
10
  line-height: 1.5;
@@ -13,7 +18,7 @@
13
18
  place-items: center;
14
19
  overflow: auto;
15
20
  padding: 16px;
16
- background: rgb(17 24 39 / 46%);
21
+ background: var(--sparq-captcha-color-backdrop, rgb(17 24 39 / 46%));
17
22
  }
18
23
 
19
24
  .sparq-captcha-modal,
@@ -21,19 +26,41 @@
21
26
  width: min(100%, 360px);
22
27
  box-sizing: border-box;
23
28
  padding: 20px;
24
- border: 1px solid #d1d5db;
25
- border-radius: 6px;
26
- background: #ffffff;
29
+ border: 1px solid var(--sparq-captcha-color-border, #d1d5db);
30
+ border-radius: var(--sparq-captcha-radius, 6px);
31
+ background: var(--sparq-captcha-color-surface, #ffffff);
32
+ }
33
+
34
+ .sparq-captcha-inline {
35
+ width: var(--sparq-captcha-inline-width, min(100%, 360px));
36
+ padding: var(--sparq-captcha-inline-padding, 20px);
37
+ border-width: var(--sparq-captcha-inline-border-width, 1px);
38
+ background: var(--sparq-captcha-inline-background, var(--sparq-captcha-color-surface, #ffffff));
39
+ box-shadow: var(--sparq-captcha-inline-shadow, none);
27
40
  }
28
41
 
29
42
  .sparq-captcha-modal {
30
- box-shadow: 0 16px 36px rgb(17 24 39 / 20%);
43
+ box-shadow: var(--sparq-captcha-shadow, 0 16px 36px rgb(17 24 39 / 20%));
44
+ }
45
+
46
+ .sparq-captcha-modal__header {
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ gap: 16px;
51
+ margin-bottom: 16px;
52
+ }
53
+
54
+ .sparq-captcha-modal__actions {
55
+ display: flex;
56
+ flex: 0 0 auto;
57
+ gap: 4px;
31
58
  }
32
59
 
33
60
  .sparq-captcha-modal h2,
34
61
  .sparq-captcha-inline h2 {
35
- margin: 0 0 16px;
36
- color: #111827;
62
+ margin: 0;
63
+ color: var(--sparq-captcha-color-title, #111827);
37
64
  font-size: 18px;
38
65
  font-weight: 600;
39
66
  letter-spacing: 0;
@@ -45,31 +72,129 @@
45
72
  gap: 12px;
46
73
  }
47
74
 
75
+ .sparq-captcha-image-text {
76
+ grid-template-columns: minmax(0, 1fr) var(--sparq-captcha-image-width, 144px);
77
+ align-items: center;
78
+ gap: 10px;
79
+ }
80
+
48
81
  .sparq-captcha-status {
49
82
  margin: 12px 0 0;
50
- color: #b42318;
83
+ color: var(--sparq-captcha-color-danger, #b42318);
84
+ }
85
+
86
+ .sparq-captcha-modal.is-passed .sparq-captcha-status {
87
+ color: var(--sparq-captcha-color-success, #157347);
88
+ }
89
+
90
+ .sparq-captcha-modal.is-verifying .sparq-captcha-challenge {
91
+ opacity: 0.72;
51
92
  }
52
93
 
53
94
  .sparq-captcha-status:empty {
54
95
  display: none;
55
96
  }
56
97
 
57
- .sparq-captcha-image-text img {
98
+ .sparq-captcha-image-button {
99
+ position: relative;
58
100
  display: block;
59
- width: 180px;
60
- max-width: 100%;
61
- height: 64px;
62
- border: 1px solid #d1d5db;
101
+ width: var(--sparq-captcha-image-width, 144px);
102
+ height: var(--sparq-captcha-control-height, 44px);
103
+ box-sizing: border-box;
104
+ padding: 0;
105
+ border: 1px solid var(--sparq-captcha-color-border, #d1d5db);
106
+ border-radius: var(--sparq-captcha-radius, 6px);
107
+ overflow: hidden;
108
+ background: var(--sparq-captcha-color-surface-soft, #f3f4f6);
109
+ cursor: pointer;
110
+ transition:
111
+ border-color 180ms ease,
112
+ box-shadow 180ms ease,
113
+ opacity 180ms ease;
114
+ }
115
+
116
+ .sparq-captcha-image-button:hover:not(:disabled) {
117
+ border-color: var(--sparq-captcha-color-border-strong, #9ca3af);
63
118
  }
64
119
 
65
- .sparq-captcha-image-text input {
66
- min-height: 40px;
120
+ .sparq-captcha-image-button.is-refreshing img {
121
+ opacity: 0.42;
122
+ }
123
+
124
+ .sparq-captcha-image-button.is-refreshing::after {
125
+ position: absolute;
126
+ top: 50%;
127
+ left: 50%;
128
+ width: 18px;
129
+ height: 18px;
130
+ box-sizing: border-box;
131
+ margin: -9px 0 0 -9px;
132
+ border: 2px solid var(--sparq-captcha-color-surface, #ffffff);
133
+ border-top-color: var(--sparq-captcha-color-primary, #2563eb);
134
+ border-radius: 50%;
135
+ animation: sparq-captcha-spin 720ms linear infinite;
136
+ content: '';
137
+ }
138
+
139
+ .sparq-captcha-image-button img {
140
+ display: block;
141
+ width: 100%;
142
+ height: 100%;
143
+ object-fit: contain;
144
+ }
145
+
146
+ .sparq-captcha-image-button:disabled {
147
+ cursor: wait;
148
+ opacity: 0.65;
149
+ }
150
+
151
+ @keyframes sparq-captcha-spin {
152
+ to {
153
+ transform: rotate(360deg);
154
+ }
155
+ }
156
+
157
+ .sparq-captcha-image-text input,
158
+ .sparq-captcha-question-answer input {
159
+ width: 100%;
160
+ min-width: 0;
161
+ min-height: var(--sparq-captcha-control-height, 44px);
67
162
  box-sizing: border-box;
68
163
  padding: 8px 10px;
69
- border: 1px solid #9ca3af;
70
- border-radius: 4px;
71
- color: inherit;
164
+ border: 1px solid var(--sparq-captcha-color-border, #d1d5db);
165
+ border-radius: var(--sparq-captcha-radius, 6px);
166
+ outline: 0;
167
+ color: var(--sparq-captcha-color-text, #1f2937);
168
+ background: var(--sparq-captcha-color-surface, #ffffff);
72
169
  font: inherit;
170
+ transition:
171
+ border-color 180ms ease,
172
+ box-shadow 180ms ease,
173
+ background-color 180ms ease;
174
+ }
175
+
176
+ .sparq-captcha-image-text input:hover:not(:disabled),
177
+ .sparq-captcha-question-answer input:hover:not(:disabled) {
178
+ border-color: var(--sparq-captcha-color-border-strong, #9ca3af);
179
+ }
180
+
181
+ .sparq-captcha-image-text input:focus,
182
+ .sparq-captcha-question-answer input:focus {
183
+ border-color: var(--sparq-captcha-color-primary, #2563eb);
184
+ box-shadow: var(--sparq-captcha-focus, 0 0 0 3px rgb(37 99 235 / 22%));
185
+ }
186
+
187
+ .sparq-captcha-image-text input:disabled,
188
+ .sparq-captcha-question-answer input:disabled {
189
+ color: var(--sparq-captcha-color-muted, #6b7280);
190
+ background: var(--sparq-captcha-color-surface-soft, #f3f4f6);
191
+ cursor: not-allowed;
192
+ }
193
+
194
+ .sparq-captcha-image-text input::placeholder,
195
+ .sparq-captcha-question-answer input::placeholder {
196
+ color: var(--sparq-captcha-color-muted, #6b7280);
197
+ opacity: 1;
73
198
  }
74
199
 
75
200
  .sparq-captcha-modal > div:last-child,
@@ -82,14 +207,75 @@
82
207
 
83
208
  .sparq-captcha-modal button,
84
209
  .sparq-captcha-inline button {
85
- min-height: 36px;
86
- padding: 7px 12px;
87
- border: 1px solid #9ca3af;
88
- border-radius: 4px;
89
- background: #ffffff;
90
- color: #111827;
210
+ min-height: var(--sparq-captcha-control-height, 44px);
211
+ padding: 8px 14px;
212
+ border: 1px solid var(--sparq-captcha-color-border-strong, #9ca3af);
213
+ border-radius: var(--sparq-captcha-radius, 6px);
214
+ background: var(--sparq-captcha-color-surface, #ffffff);
215
+ color: var(--sparq-captcha-color-title, #111827);
91
216
  cursor: pointer;
92
217
  font: inherit;
218
+ transition:
219
+ border-color 180ms ease,
220
+ background-color 180ms ease,
221
+ color 180ms ease,
222
+ box-shadow 180ms ease;
223
+ }
224
+
225
+ .sparq-captcha-modal button:hover:not(:disabled),
226
+ .sparq-captcha-inline button:hover:not(:disabled) {
227
+ border-color: var(--sparq-captcha-color-primary, #2563eb);
228
+ background: var(--sparq-captcha-color-surface-soft, #f3f4f6);
229
+ }
230
+
231
+ .sparq-captcha-modal .sparq-captcha-submit,
232
+ .sparq-captcha-inline .sparq-captcha-submit {
233
+ border-color: var(--sparq-captcha-color-primary, #2563eb);
234
+ background: var(--sparq-captcha-color-primary, #2563eb);
235
+ color: var(--sparq-captcha-color-primary-contrast, #ffffff);
236
+ }
237
+
238
+ .sparq-captcha-modal .sparq-captcha-submit:hover:not(:disabled),
239
+ .sparq-captcha-inline .sparq-captcha-submit:hover:not(:disabled) {
240
+ background: color-mix(
241
+ in srgb,
242
+ var(--sparq-captcha-color-primary, #2563eb) 88%,
243
+ var(--sparq-captcha-color-title, #111827)
244
+ );
245
+ }
246
+
247
+ .sparq-captcha-modal .sparq-captcha-modal__icon-button {
248
+ display: inline-grid;
249
+ width: var(--sparq-captcha-control-height, 44px);
250
+ height: var(--sparq-captcha-control-height, 44px);
251
+ min-height: var(--sparq-captcha-control-height, 44px);
252
+ place-items: center;
253
+ padding: 0;
254
+ border-color: transparent;
255
+ background: transparent;
256
+ color: var(--sparq-captcha-color-muted, #6b7280);
257
+ line-height: 1;
258
+ }
259
+
260
+ .sparq-captcha-modal .sparq-captcha-modal__icon-button:hover:not(:disabled) {
261
+ border-color: var(--sparq-captcha-color-border, #d1d5db);
262
+ background: var(--sparq-captcha-color-surface-soft, #f3f4f6);
263
+ color: var(--sparq-captcha-color-title, #111827);
264
+ }
265
+
266
+ .sparq-captcha-modal__icon {
267
+ display: block;
268
+ width: 18px;
269
+ height: 18px;
270
+ fill: none;
271
+ stroke: currentColor;
272
+ stroke-linecap: round;
273
+ stroke-linejoin: round;
274
+ stroke-width: 2;
275
+ }
276
+
277
+ .sparq-captcha-modal .sparq-captcha-modal__icon-button.is-refreshing .sparq-captcha-modal__icon {
278
+ animation: sparq-captcha-spin 720ms linear infinite;
93
279
  }
94
280
 
95
281
  .sparq-captcha-modal button:disabled,
@@ -98,8 +284,26 @@
98
284
  opacity: 0.55;
99
285
  }
100
286
 
287
+ .sparq-captcha-modal .sparq-captcha-image-button,
288
+ .sparq-captcha-inline .sparq-captcha-image-button {
289
+ min-height: 0;
290
+ padding: 0;
291
+ }
292
+
101
293
  .sparq-captcha-modal :focus-visible,
102
- .sparq-captcha-inline :focus-visible {
103
- outline: 3px solid #2563eb;
104
- outline-offset: 2px;
294
+ .sparq-captcha-inline :focus-visible,
295
+ .sparq-captcha-image-button:focus-visible {
296
+ outline: 0;
297
+ border-color: var(--sparq-captcha-color-primary, #2563eb);
298
+ box-shadow: var(--sparq-captcha-focus, 0 0 0 3px rgb(37 99 235 / 22%));
299
+ }
300
+
301
+ @media (prefers-reduced-motion: reduce) {
302
+ .sparq-captcha-runtime *,
303
+ .sparq-captcha-runtime *::before,
304
+ .sparq-captcha-runtime *::after {
305
+ transition-duration: 0.01ms !important;
306
+ animation-duration: 0.01ms !important;
307
+ animation-iteration-count: 1 !important;
308
+ }
105
309
  }