hikoutei 0.8.1 → 0.8.2

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.
Files changed (109) hide show
  1. package/README.md +4 -0
  2. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +23 -11
  3. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -1
  4. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +26 -18
  5. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -1
  6. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +24 -5
  7. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -1
  8. package/dist/adapter/sheets/providers/google-sheets-api/constants.js +24 -5
  9. package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -1
  10. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +8 -0
  11. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -1
  12. package/dist/adapter/sheets/providers/google-sheets-api/errors.js +20 -0
  13. package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -1
  14. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +1 -1
  15. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -1
  16. package/dist/adapter/sheets/providers/google-sheets-api/index.js +1 -1
  17. package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -1
  18. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +11 -1
  19. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -1
  20. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +12 -2
  21. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -1
  22. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts +19 -6
  23. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts.map +1 -1
  24. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js +52 -10
  25. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js.map +1 -1
  26. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +13 -0
  27. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -1
  28. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +51 -3
  29. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -1
  30. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +40 -4
  31. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -1
  32. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +26 -20
  33. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -1
  34. package/dist/api/Hikoutei.d.ts.map +1 -1
  35. package/dist/api/Hikoutei.js +244 -30
  36. package/dist/api/Hikoutei.js.map +1 -1
  37. package/dist/api/internalEntityManager.d.ts.map +1 -1
  38. package/dist/api/internalEntityManager.js +152 -53
  39. package/dist/api/internalEntityManager.js.map +1 -1
  40. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts +41 -0
  41. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -1
  42. package/dist/application/sync/outbound/SheetsEffectDispatcher.js +85 -3
  43. package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -1
  44. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  45. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +39 -5
  46. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  47. package/dist/application/sync/outbound/reconciliation/diff.d.ts +19 -1
  48. package/dist/application/sync/outbound/reconciliation/diff.d.ts.map +1 -1
  49. package/dist/application/sync/outbound/reconciliation/diff.js +60 -17
  50. package/dist/application/sync/outbound/reconciliation/diff.js.map +1 -1
  51. package/dist/application/sync/outbound/reconciliation/repair.d.ts +34 -3
  52. package/dist/application/sync/outbound/reconciliation/repair.d.ts.map +1 -1
  53. package/dist/application/sync/outbound/reconciliation/repair.js +120 -47
  54. package/dist/application/sync/outbound/reconciliation/repair.js.map +1 -1
  55. package/dist/application/sync/outbound/reconciliation/shared.d.ts +20 -0
  56. package/dist/application/sync/outbound/reconciliation/shared.d.ts.map +1 -1
  57. package/dist/application/sync/outbound/reconciliation/shared.js +35 -0
  58. package/dist/application/sync/outbound/reconciliation/shared.js.map +1 -1
  59. package/dist/application/sync/service/SyncPollingSupervisor.d.ts +16 -0
  60. package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -1
  61. package/dist/application/sync/service/SyncPollingSupervisor.js +24 -0
  62. package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -1
  63. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  64. package/dist/application/sync/service/SyncServiceBootstrap.js +26 -1
  65. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  66. package/dist/application/sync/service/effectSupervisor.d.ts.map +1 -1
  67. package/dist/application/sync/service/effectSupervisor.js +114 -9
  68. package/dist/application/sync/service/effectSupervisor.js.map +1 -1
  69. package/dist/application/sync/service/pollingSupervisor.d.ts +17 -0
  70. package/dist/application/sync/service/pollingSupervisor.d.ts.map +1 -1
  71. package/dist/application/sync/service/pollingSupervisor.js +103 -3
  72. package/dist/application/sync/service/pollingSupervisor.js.map +1 -1
  73. package/dist/application/sync/service/serviceOptions.d.ts.map +1 -1
  74. package/dist/application/sync/service/serviceOptions.js +28 -18
  75. package/dist/application/sync/service/serviceOptions.js.map +1 -1
  76. package/dist/application/sync/service/shutdown.d.ts.map +1 -1
  77. package/dist/application/sync/service/shutdown.js +6 -2
  78. package/dist/application/sync/service/shutdown.js.map +1 -1
  79. package/dist/application/sync/service/syncAutoStart.d.ts +71 -6
  80. package/dist/application/sync/service/syncAutoStart.d.ts.map +1 -1
  81. package/dist/application/sync/service/syncAutoStart.js +190 -23
  82. package/dist/application/sync/service/syncAutoStart.js.map +1 -1
  83. package/dist/application/sync/service/systemStateReadiness.d.ts +35 -0
  84. package/dist/application/sync/service/systemStateReadiness.d.ts.map +1 -0
  85. package/dist/application/sync/service/systemStateReadiness.js +51 -0
  86. package/dist/application/sync/service/systemStateReadiness.js.map +1 -0
  87. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts +37 -1
  88. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -1
  89. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js +57 -3
  90. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -1
  91. package/dist/application/sync/sheetsContract/transportOutcome.d.ts +32 -5
  92. package/dist/application/sync/sheetsContract/transportOutcome.d.ts.map +1 -1
  93. package/dist/application/sync/sheetsContract/transportOutcome.js +101 -7
  94. package/dist/application/sync/sheetsContract/transportOutcome.js.map +1 -1
  95. package/dist/internal/syncStatus.js +33 -2
  96. package/dist/internal/syncStatus.js.map +1 -1
  97. package/dist/shared/observability/index.d.ts +9 -0
  98. package/dist/shared/observability/index.d.ts.map +1 -0
  99. package/dist/shared/observability/index.js +9 -0
  100. package/dist/shared/observability/index.js.map +1 -0
  101. package/dist/shared/observability/internalLog.d.ts +175 -0
  102. package/dist/shared/observability/internalLog.d.ts.map +1 -0
  103. package/dist/shared/observability/internalLog.js +471 -0
  104. package/dist/shared/observability/internalLog.js.map +1 -0
  105. package/dist/shared/observability/logEvents.d.ts +96 -0
  106. package/dist/shared/observability/logEvents.d.ts.map +1 -0
  107. package/dist/shared/observability/logEvents.js +247 -0
  108. package/dist/shared/observability/logEvents.js.map +1 -0
  109. package/package.json +5 -4
@@ -4,18 +4,51 @@
4
4
  *
5
5
  * The provider class hands one immutable `GoogleSheetsApiProviderDeps` object
6
6
  * to every operation function so the class stays a thin facade. Pacing
7
- * (read/write request-start limiters), redacted telemetry, route validation
8
- * against the registered definition, and batchUpdate reply validation live
9
- * here because every operation shares them.
7
+ * (ONE request-start limiter shared by reads and writes), redacted
8
+ * telemetry, route validation against the registered definition, and
9
+ * batchUpdate reply validation live here because every operation shares
10
+ * them.
10
11
  */
11
12
  import { SYNC_SHEETS_ERROR_CODES, SyncSheetsContractError, } from "../../../../../application/sync/sheetsContract/errors.js";
12
- import { classifyTransportOutcome } from "../../../../../application/sync/sheetsContract/transportOutcome.js";
13
- import { presentValue, absentValue } from "../../../../../shared/state/index.js";
14
- import { invalidProviderState } from "../errors.js";
13
+ import { classifyTransportOutcome, sanitizeTransportRemoteCode } from "../../../../../application/sync/sheetsContract/transportOutcome.js";
14
+ import { presentValue, absentValue, PRESENCE_KINDS } from "../../../../../shared/state/index.js";
15
+ import { logHikouteiInternalEvent, } from "../../../../../shared/observability/internalLog.js";
16
+ import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, } from "../../../../../shared/observability/logEvents.js";
17
+ import { GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES, GoogleSheetsApiTransportError, invalidProviderState, } from "../errors.js";
15
18
  import { batchUpdateResponseShapeSchema } from "../model/rawResponseSchemas.js";
19
+ /**
20
+ * Static, redacted refusal message. Never embeds effect ids, sheet names,
21
+ * spreadsheet ids, or limiter state: the durable worker only needs the
22
+ * stable code to requeue through the CAS/recovery path.
23
+ */
24
+ const REQUEST_START_REFUSED_MESSAGE = "Google Sheets API request start refused before transport: the shared pacing queue exceeds the bounded admission wait.";
25
+ /**
26
+ * Acquires one bounded request-start slot, refusing (and logging one
27
+ * redacted event) when the predicted wait exceeds the configured bound.
28
+ * A refusal NEVER advances the limiter horizon and throws the stable
29
+ * delivery-uncertain transport error before any SDK call, so the durable
30
+ * worker requeues instead of firing an unpaced burst.
31
+ */
32
+ async function admitRequestStart(deps, operation) {
33
+ const admission = await deps.requestLimiter.waitForSlot(deps.maxRequestStartWaitMs);
34
+ if (admission.status !== "refused")
35
+ return;
36
+ // Boundary record for a locally refused start: only the stable code is
37
+ // logged (retryable, like the other delivery-uncertain buckets), never a
38
+ // message, payload, id, or URL.
39
+ logHikouteiInternalEvent({
40
+ event: HIKOUTEI_LOG_EVENTS.TRANSPORT_REQUEST_FAILED,
41
+ level: "warn",
42
+ component: HIKOUTEI_LOG_COMPONENTS.TRANSPORT,
43
+ code: GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES.REQUEST_START_REFUSED,
44
+ errorClass: "GoogleSheetsApiTransportError",
45
+ retryable: true,
46
+ });
47
+ throw new GoogleSheetsApiTransportError(GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES.REQUEST_START_REFUSED, REQUEST_START_REFUSED_MESSAGE, absentValue(), absentValue());
48
+ }
16
49
  /** Paces ONE `getSpreadsheet` transport call and emits one read event. */
17
50
  export async function runRead(deps, task) {
18
- await deps.readLimiter.waitForSlot();
51
+ await admitRequestStart(deps, "getSpreadsheet");
19
52
  const startedAt = deps.now();
20
53
  try {
21
54
  const result = await task();
@@ -30,7 +63,7 @@ export async function runRead(deps, task) {
30
63
  }
31
64
  /** Paces ONE `batchUpdate` transport call and emits one write event. */
32
65
  export async function runWrite(deps, task) {
33
- await deps.writeLimiter.waitForSlot();
66
+ await admitRequestStart(deps, "batchUpdate");
34
67
  const startedAt = deps.now();
35
68
  try {
36
69
  const result = await task();
@@ -43,7 +76,14 @@ export async function runWrite(deps, task) {
43
76
  throw error;
44
77
  }
45
78
  }
46
- /** Emits one redacted telemetry event; diagnostics must never throw. */
79
+ /**
80
+ * Emits one redacted telemetry event; diagnostics must never throw.
81
+ *
82
+ * The code is re-sanitized at the sink as defense in depth: every value
83
+ * reaching `onRequest` is either an allowlisted stable code or the fixed
84
+ * `unknown` category, so a future caller can never forward an arbitrary
85
+ * remote string.
86
+ */
47
87
  export function emitRequest(deps, operation, operationCount, startedAt, ok, httpStatus, code) {
48
88
  try {
49
89
  deps.onRequest?.({
@@ -53,7 +93,9 @@ export function emitRequest(deps, operation, operationCount, startedAt, ok, http
53
93
  durationMs: Math.max(0, deps.now() - startedAt),
54
94
  ok,
55
95
  httpStatus,
56
- code,
96
+ code: code.kind === PRESENCE_KINDS.PRESENT
97
+ ? presentValue(sanitizeTransportRemoteCode(code.value))
98
+ : code,
57
99
  });
58
100
  }
59
101
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/operations/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/operations/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,oEAAoE,CAAC;AAC3I,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAiB,MAAM,sCAAsC,CAAC;AAChH,OAAO,EACL,wBAAwB,GACzB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kDAAkD,CAAC;AAI1D,OAAO,EACL,uCAAuC,EACvC,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAoBhF;;;;GAIG;AACH,MAAM,6BAA6B,GACjC,uHAAuH,CAAC;AAE1H;;;;;;GAMG;AACH,KAAK,UAAU,iBAAiB,CAC9B,IAAiC,EACjC,SAA2C;IAE3C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpF,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IAC3C,uEAAuE;IACvE,yEAAyE;IACzE,gCAAgC;IAChC,wBAAwB,CAAC;QACvB,KAAK,EAAE,mBAAmB,CAAC,wBAAwB;QACnD,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,uBAAuB,CAAC,SAAS;QAC5C,IAAI,EAAE,uCAAuC,CAAC,qBAAqB;QACnE,UAAU,EAAE,+BAA+B;QAC3C,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,MAAM,IAAI,6BAA6B,CACrC,uCAAuC,CAAC,qBAAqB,EAC7D,6BAA6B,EAC7B,WAAW,EAAE,EACb,WAAW,EAAE,CACd,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAiC,EACjC,IAAsB;IAEtB,MAAM,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAChD,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAiC,EACjC,IAAsB;IAEtB,MAAM,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAChD,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,IAAiC,EACjC,SAA2C,EAC3C,cAAsB,EACtB,SAAiB,EACjB,EAAW,EACX,UAA4B,EAC5B,IAAsB;IAEtB,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS;YACT,cAAc;YACd,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC/C,EAAE;YACF,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;gBACxC,CAAC,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD,CAAC,CAAC,IAAI;SACT,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,0BAA0B,CACxC,IAAiC,EACjC,eAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACtC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,KAAK,eAAe,CACnE,CAAC;IACF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,uBAAuB,CAC/B,uBAAuB,CAAC,gCAAgC,EACxD,sCAAsC,GAAG,eAAe,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,OAKC,EACD,UAA8C;IAE9C,IACE,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,OAAO;QAC9C,OAAO,CAAC,eAAe,KAAK,UAAU,CAAC,KAAK,CAAC,eAAe;QAC5D,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,CAAC,UAAU;QAClD,OAAO,CAAC,aAAa,KAAK,UAAU,CAAC,KAAK,CAAC,aAAa,EACxD,CAAC;QACD,MAAM,IAAI,uBAAuB,CAC/B,uBAAuB,CAAC,sBAAsB,EAC9C,iEAAiE;YACjE,UAAU,CAAC,KAAK,CAAC,eAAe,CACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAChC,UAA8C;IAK9C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,KAAK,cAAc;QAClE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB;QACnC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,KAAK,gBAAgB;YAChD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACL,aAAa,EAAE,aAAa,KAAK,SAAS;YACxC,CAAC,CAAC,WAAW,EAAE;YACf,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC;QAC/B,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,EAAE;KAClD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAc,EAAE,YAAoB;IAC/E,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,oBAAoB,CAAC,wCAAwC,CAAC,CAAC;QACjE,CAAC;QACD,oBAAoB,CAClB,0CAA0C,YAAY,WAAW,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAC3C,oBAAoB,CAClB,0CAA0C,YAAY,WAAW,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACtC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,oBAAoB,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,WAAW,GAAG,KAAgC,CAAC;QACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;QACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjF,oBAAoB,CAAC,qBAAqB,KAAK,uBAAuB,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,UAAU,GAAI,QAAoC,CAAC,UAAU,CAAC;QACpE,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACvF,oBAAoB,CAAC,qBAAqB,KAAK,kCAAkC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,OAAQ,UAAsC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxE,oBAAoB,CAAC,qBAAqB,KAAK,0CAA0C,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -143,6 +143,19 @@ export declare class GoogleSheetsApiHttpTransport implements GoogleSheetsApiTran
143
143
  * never as a proven pre-mutation rejection.
144
144
  */
145
145
  export declare function classifyGoogleSheetsApiError(error: unknown): GoogleSheetsApiTransportError;
146
+ /**
147
+ * True when the status kind marks a transient remote condition.
148
+ *
149
+ * Mirrors the shared `isGoogleSheetsApiDeliveryUncertain` boundary: an
150
+ * absent status (timeout/network), HTTP 408 (request timeout — the proxy or
151
+ * API may still have committed the write), HTTP 429, and every 5xx are
152
+ * retryable/uncertain; the proven pre-mutation 4xx rejections (400, 401,
153
+ * 403, 404) are not. This only buckets telemetry — gaxios auto-retry stays
154
+ * disabled (`retry: false`), so a mutating call is never blindly retried
155
+ * here; the durable worker owns retries through the shared outcome
156
+ * classifier.
157
+ */
158
+ export declare function isRetryableTransportStatus(status: number | undefined): boolean;
146
159
  /**
147
160
  * Builds the SDK batchUpdate body from provider write requests. The SDK
148
161
  * request union is wider than the provider's narrow shapes; this boundary
@@ -1 +1 @@
1
- {"version":3,"file":"googleSheetsApiTransport.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"googleSheetsApiTransport.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,9 @@
10
10
  */
11
11
  import { GoogleAuth } from "google-auth-library";
12
12
  import { sheets } from "@googleapis/sheets";
13
- import { presentValue, absentValue } from "../../../../../shared/state/index.js";
13
+ import { presentValue, absentValue, PRESENCE_KINDS } from "../../../../../shared/state/index.js";
14
+ import { logHikouteiInternalEvent, } from "../../../../../shared/observability/internalLog.js";
15
+ import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, } from "../../../../../shared/observability/logEvents.js";
14
16
  import { GOOGLE_SHEETS_API_SCOPES } from "../constants.js";
15
17
  import { GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES, GoogleSheetsApiTransportError, } from "../errors.js";
16
18
  import { parseRawErrorRecord, parseRawErrorText, parseRawHttpStatus, } from "./rawErrorSchemas.js";
@@ -46,7 +48,9 @@ export class GoogleSheetsApiHttpTransport {
46
48
  return response.data;
47
49
  }
48
50
  catch (error) {
49
- throw classifyGoogleSheetsApiError(error);
51
+ const mapped = classifyGoogleSheetsApiError(error);
52
+ logTransportFailure(mapped);
53
+ throw mapped;
50
54
  }
51
55
  }
52
56
  async batchUpdate(request) {
@@ -61,7 +65,9 @@ export class GoogleSheetsApiHttpTransport {
61
65
  return response.data;
62
66
  }
63
67
  catch (error) {
64
- throw classifyGoogleSheetsApiError(error);
68
+ const mapped = classifyGoogleSheetsApiError(error);
69
+ logTransportFailure(mapped);
70
+ throw mapped;
65
71
  }
66
72
  }
67
73
  }
@@ -91,6 +97,48 @@ export function classifyGoogleSheetsApiError(error) {
91
97
  ? absentValue()
92
98
  : presentValue(shape.code));
93
99
  }
100
+ /**
101
+ * Emits one redacted transport-failure event (fail-open, no message text).
102
+ *
103
+ * Timeout, network, 429, 408, and 5xx failures are classified retryable so
104
+ * log consumers can bucket transient Sheets quota/pacing pressure; proven
105
+ * pre-mutation 4xx status codes (400/401/403/404) are not. The HTTP status
106
+ * is carried as a numeric count only; the spreadsheet ID, URL, and response
107
+ * body never reach the log.
108
+ */
109
+ function logTransportFailure(error) {
110
+ const status = error.status.kind === PRESENCE_KINDS.PRESENT
111
+ ? error.status.value
112
+ : undefined;
113
+ logHikouteiInternalEvent({
114
+ event: HIKOUTEI_LOG_EVENTS.TRANSPORT_REQUEST_FAILED,
115
+ level: "warn",
116
+ component: HIKOUTEI_LOG_COMPONENTS.TRANSPORT,
117
+ code: error.code,
118
+ errorClass: "GoogleSheetsApiTransportError",
119
+ retryable: isRetryableTransportStatus(status),
120
+ ...(status === undefined ? {} : { counts: { status } }),
121
+ });
122
+ }
123
+ /**
124
+ * True when the status kind marks a transient remote condition.
125
+ *
126
+ * Mirrors the shared `isGoogleSheetsApiDeliveryUncertain` boundary: an
127
+ * absent status (timeout/network), HTTP 408 (request timeout — the proxy or
128
+ * API may still have committed the write), HTTP 429, and every 5xx are
129
+ * retryable/uncertain; the proven pre-mutation 4xx rejections (400, 401,
130
+ * 403, 404) are not. This only buckets telemetry — gaxios auto-retry stays
131
+ * disabled (`retry: false`), so a mutating call is never blindly retried
132
+ * here; the durable worker owns retries through the shared outcome
133
+ * classifier.
134
+ */
135
+ export function isRetryableTransportStatus(status) {
136
+ if (status === undefined)
137
+ return true;
138
+ if (status === 408 || status === 429)
139
+ return true;
140
+ return status >= 500;
141
+ }
94
142
  function extractGaxiosErrorShape(error) {
95
143
  const record = parseRawErrorRecord(error);
96
144
  if (record === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"googleSheetsApiTransport.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"googleSheetsApiTransport.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,15 @@
2
2
  * Request-start interval limiter used by the direct Sheets provider.
3
3
  *
4
4
  * Google Sheets quota windows are per 100 seconds, so bursty request starts
5
- * can exhaust a class's budget before the worker's own latency/backoff reacts.
6
- * The provider keeps two independent limiters (reads, writes) that only wait
7
- * the time remaining since that class's last request START; an idle class is
8
- * never throttled and concurrent classes never serialize against each other.
5
+ * can exhaust the budget before the worker's own latency/backoff reacts. The
6
+ * provider keeps ONE shared limiter for reads AND writes, so combined
7
+ * read+write request starts are serialized: at most one transport call
8
+ * (getSpreadsheet or batchUpdate) can start per interval no matter how many
9
+ * operations race. An idle provider is never throttled; the limiter only
10
+ * waits the time remaining since the previous request START. Admission is
11
+ * BOUNDED: a caller whose slot lies more than `maxWaitMs` out is refused
12
+ * without reserving anything, so a burst of concurrent callers can never
13
+ * queue an arbitrarily long line of future reservations.
9
14
  */
10
15
  export interface RequestStartLimiterOptions {
11
16
  /** Minimum interval between two request starts of this limiter class. */
@@ -15,6 +20,24 @@ export interface RequestStartLimiterOptions {
15
20
  /** Injectable sleep used while waiting for the next slot. */
16
21
  readonly sleep?: (ms: number) => Promise<void>;
17
22
  }
23
+ /**
24
+ * Result of one BOUNDED `waitForSlot(maxWaitMs)` admission attempt.
25
+ *
26
+ * An admitted caller owns the reserved slot and waits `waitedMs`; a refused
27
+ * caller reserved NOTHING (the future slot stays available to later callers)
28
+ * and the limiter's `lastStartAt` is left untouched, so a refusal can never
29
+ * push the pacing horizon forward.
30
+ */
31
+ export type RequestStartAdmission = {
32
+ readonly status: "admitted";
33
+ readonly waitedMs: number;
34
+ } | {
35
+ readonly status: "refused";
36
+ /** The wait the refused slot WOULD have required. */
37
+ readonly waitedMs: number;
38
+ /** The slot that was NOT reserved; still open to later callers. */
39
+ readonly nextStartAt: number;
40
+ };
18
41
  /**
19
42
  * Waits only the remaining interval since the previous request start.
20
43
  *
@@ -43,5 +66,18 @@ export declare class RequestStartLimiter {
43
66
  * has already passed waits zero (its reservation collapses to now).
44
67
  */
45
68
  waitForSlot(): Promise<number>;
69
+ /**
70
+ * Bounded admission: waits for the next slot only when the predicted wait
71
+ * is at most `maxWaitMs`, otherwise returns a REFUSED result without
72
+ * reserving or advancing the future slot.
73
+ *
74
+ * The bound keeps an unbounded queue of concurrent callers from each
75
+ * reserving a distant future slot: with `maxWaitMs` equal to `intervalMs`
76
+ * the immediate caller and the one exactly one interval out are admitted
77
+ * and every later reservation is refused up front. A refusal never records
78
+ * a start, so the pacing horizon is unchanged and a later caller can still
79
+ * be admitted once time advances past the reserved slot.
80
+ */
81
+ waitForSlot(maxWaitMs: number): Promise<RequestStartAdmission>;
46
82
  }
47
83
  //# sourceMappingURL=rateLimiter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,WAAW,CAAqB;gBAErB,OAAO,EAAE,0BAA0B;IAStD,gEAAgE;IACzD,SAAS,IAAI,MAAM,GAAG,SAAS;IAItC;;;;;;;;;;;;OAYG;IACU,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;CAY5C"}
1
+ {"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1D;IACA,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEJ;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,WAAW,CAAqB;gBAErB,OAAO,EAAE,0BAA0B;IAStD,gEAAgE;IACzD,SAAS,IAAI,MAAM,GAAG,SAAS;IAItC;;;;;;;;;;;;OAYG;IACI,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IACrC;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA+BtE"}
@@ -2,10 +2,15 @@
2
2
  * Request-start interval limiter used by the direct Sheets provider.
3
3
  *
4
4
  * Google Sheets quota windows are per 100 seconds, so bursty request starts
5
- * can exhaust a class's budget before the worker's own latency/backoff reacts.
6
- * The provider keeps two independent limiters (reads, writes) that only wait
7
- * the time remaining since that class's last request START; an idle class is
8
- * never throttled and concurrent classes never serialize against each other.
5
+ * can exhaust the budget before the worker's own latency/backoff reacts. The
6
+ * provider keeps ONE shared limiter for reads AND writes, so combined
7
+ * read+write request starts are serialized: at most one transport call
8
+ * (getSpreadsheet or batchUpdate) can start per interval no matter how many
9
+ * operations race. An idle provider is never throttled; the limiter only
10
+ * waits the time remaining since the previous request START. Admission is
11
+ * BOUNDED: a caller whose slot lies more than `maxWaitMs` out is refused
12
+ * without reserving anything, so a burst of concurrent callers can never
13
+ * queue an arbitrarily long line of future reservations.
9
14
  */
10
15
  const DEFAULT_SLEEP = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
11
16
  /**
@@ -31,30 +36,31 @@ export class RequestStartLimiter {
31
36
  lastStart() {
32
37
  return this.lastStartAt;
33
38
  }
34
- /**
35
- * Waits for the next request-start slot and records the start time.
36
- *
37
- * Returns the number of milliseconds actually waited. A limiter with a zero
38
- * interval never waits and records every start.
39
- *
40
- * The slot reservation happens SYNCHRONOUSLY before any await: each caller
41
- * reserves the NEXT slot (`nextStart = max(now, lastStartAt + intervalMs)`)
42
- * and records it immediately, so two concurrent waiters can never compute
43
- * the same remaining time from the same `lastStartAt`, sleep together, and
44
- * start at the same instant. A caller that arrives after its reserved slot
45
- * has already passed waits zero (its reservation collapses to now).
46
- */
47
- async waitForSlot() {
39
+ async waitForSlot(maxWaitMs) {
40
+ if (maxWaitMs !== undefined &&
41
+ (!Number.isSafeInteger(maxWaitMs) || maxWaitMs < 0)) {
42
+ throw new RangeError("maximum request-start wait must be a non-negative safe integer");
43
+ }
48
44
  const now = this.now();
49
45
  const nextStart = this.lastStartAt === undefined
50
46
  ? now
51
47
  : Math.max(now, this.lastStartAt + this.intervalMs);
52
- this.lastStartAt = nextStart;
53
48
  const waited = Math.max(0, nextStart - now);
49
+ if (maxWaitMs !== undefined && waited > maxWaitMs) {
50
+ // Refused WITHOUT reserving: lastStartAt stays untouched, so a later
51
+ // bounded caller can still be admitted once the queue drains. The
52
+ // decision and the horizon read happen in the same synchronous tick
53
+ // as an admitted caller's reservation, so concurrent callers can never
54
+ // both see the same stale horizon and double-reserve a slot.
55
+ return { status: "refused", waitedMs: waited, nextStartAt: nextStart };
56
+ }
57
+ this.lastStartAt = nextStart;
54
58
  if (waited > 0) {
55
59
  await this.sleep(waited);
56
60
  }
57
- return waited;
61
+ return maxWaitMs === undefined
62
+ ? waited
63
+ : { status: "admitted", waitedMs: waited };
58
64
  }
59
65
  }
60
66
  //# sourceMappingURL=rateLimiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,aAAa,GAAG,CAAC,EAAU,EAAiB,EAAE,CAClD,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAW1D;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACb,UAAU,CAAS;IACnB,GAAG,CAAe;IAClB,KAAK,CAAgC;IAC9C,WAAW,CAAqB;IAExC,YAAmB,OAAmC;QACpD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;IAC9C,CAAC;IAED,gEAAgE;IACzD,SAAS;QACd,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,WAAW;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,aAAa,GAAG,CAAC,EAAU,EAAiB,EAAE,CAClD,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AA6B1D;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IACb,UAAU,CAAS;IACnB,GAAG,CAAe;IAClB,KAAK,CAAgC;IAC9C,WAAW,CAAqB;IAExC,YAAmB,OAAmC;QACpD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;IAC9C,CAAC;IAED,gEAAgE;IACzD,SAAS;QACd,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IA6BM,KAAK,CAAC,WAAW,CACtB,SAAkB;QAElB,IACE,SAAS,KAAK,SAAS;YACvB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EACnD,CAAC;YACD,MAAM,IAAI,UAAU,CAAC,gEAAgE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YAClD,qEAAqE;YACrE,kEAAkE;YAClE,oEAAoE;YACpE,uEAAuE;YACvE,6DAA6D;YAC7D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"Hikoutei.d.ts","sourceRoot":"","sources":["../../src/api/Hikoutei.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAEL,cAAc,EACd,KAAK,gCAAgC,EACtC,MAAM,aAAa,CAAC;AAYrB,sDAAsD;AACtD,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA2CD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,+BAA+B,EACzC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,EAClE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAChC,QAAQ,CAEV;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,CAMR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAmBlF;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CA8BnB"}
1
+ {"version":3,"file":"Hikoutei.d.ts","sourceRoot":"","sources":["../../src/api/Hikoutei.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAEL,cAAc,EACd,KAAK,gCAAgC,EACtC,MAAM,aAAa,CAAC;AAuBrB,sDAAsD;AACtD,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA+QD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,+BAA+B,EACzC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC,EAClE,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAChC,QAAQ,CAEV;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,CAMR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAmBlF;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAsCnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CA8BnB"}