{"id":20161033,"url":"https://github.com/delight-rpc/long-running-procedure","last_synced_at":"2025-07-14T02:34:58.307Z","repository":{"id":143506889,"uuid":"615604472","full_name":"delight-rpc/long-running-procedure","owner":"delight-rpc","description":"🌿","archived":false,"fork":false,"pushed_at":"2025-06-21T09:00:36.000Z","size":319,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-21T09:03:19.193Z","etag":null,"topics":["browser","esm","library","nodejs","npm-package","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@delight-rpc/long-running-procedure","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/delight-rpc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-18T05:58:03.000Z","updated_at":"2025-06-21T09:00:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"1a061c2a-e139-4805-ad7c-accf0accdbd1","html_url":"https://github.com/delight-rpc/long-running-procedure","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/delight-rpc/long-running-procedure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delight-rpc%2Flong-running-procedure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delight-rpc%2Flong-running-procedure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delight-rpc%2Flong-running-procedure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delight-rpc%2Flong-running-procedure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/delight-rpc","download_url":"https://codeload.github.com/delight-rpc/long-running-procedure/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/delight-rpc%2Flong-running-procedure/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265233753,"owners_count":23731825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","esm","library","nodejs","npm-package","typescript"],"created_at":"2024-11-14T00:17:02.287Z","updated_at":"2025-07-14T02:34:58.248Z","avatar_url":"https://github.com/delight-rpc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# long-running-procedure\n## Install\n```sh\nnpm install --save @delight-rpc/long-running-procedure\n# or\nyarn add @delight-rpc/long-running-procedure\n```\n\n## API\n```ts\nenum CallState {\n  Pending\n, Settled\n}\n\ninterface ILongRunningProcedure\u003cArgs extends any[], Result\u003e {\n  /**\n   * 调用此过程.\n   * \n   * @returns 该调用的id.\n   */\n  call(args: Args): Awaitable\u003cstring\u003e\n\n  /**\n   * 中断一个还未完成的调用.\n   * 如果该调用已经完成或调用不存在, 该函数会静默失败.\n   */\n  abort(id: string): Awaitable\u003cNullish\u003e\n\n  /**\n   * 返回调用的状态.\n   * \n   * @throws {CallNotFound}\n   */\n  getState(id: string): Awaitable\u003cCallState\u003e\n\n  /**\n   * 获取调用的结果, 如果调用尚未完成, 则会阻塞直到完成.\n   * \n   * @throws {CallNotFound}\n   */\n  getResult(id: string): Awaitable\u003cResult\u003e\n\n  /**\n   * 删除一个已经完成的调用, 这会导致与该调用相关的信息被删除.\n   * 如果该调用还未完成, 则该操作会抛出错误.\n   * 如果该调用已经删除, 则该操作会静默失败.\n   */\n  remove(id: string): Awaitable\u003cNullish\u003e\n}\n\nclass CallNotFound extends CustomError {}\n```\n\n### LongRunningProcedure\n```ts\nclass LongRunningProcedure\u003cArgs extends unknown[], Result, Error\u003e\nimplements ILongRunningProcedure\u003cArgs, Result\u003e {\n  /**\n   * 超时和TTL的存在是为了减缓错误的实现耗尽存储空间的速度.\n   * \n   * @param timeout 调用的超时时间(毫秒), 超时的调用会被自动中断.\n   * @param timeToLive 调用从完成开始计算的存活时间(毫秒), 超出存活时间的调用会被删除.\n   */\n  constructor(\n    procedure: (...args: [...Args, AbortSignal]) =\u003e PromiseLike\u003cResult\u003e\n  , options?: {\n      store?: Store\u003cResult, Error\u003e\n      timeout?: number\n      timeToLive?: number\n    }\n  )\n}\n```\n\n### Caller\n```ts\ninterface ILongRunningProcedureCaller\u003cArgs extends unknown[], Result\u003e {\n  call(...args: [...args: Args, signal: AbortSignal]): Promise\u003cResult\u003e\n}\n```\n\n#### LongRunningProcedureCaller\n```ts\n/**\n * 以长连接方式接收长时运行过程的结果, 结果会尽快返回.\n * 请注意, 在一些信道上维持长连接需要付出成本.\n */\nclass LongRunningProcedureCaller\u003cArgs extends unknown[], Result\u003e\nimplements ILongRunningProcedureCaller\u003cArgs, Result\u003e {\n  constructor(procedure: ILongRunningProcedure\u003cArgs, Result\u003e)\n}\n```\n\n#### LongRunningProcedurePollingCaller\n```ts\n/**\n * 以轮询方式接收长时运行过程的结果, 这无法尽快返回结果.\n * 请注意, 视轮询间隔, 可能会造成很多被浪费的请求.\n */\nclass LongRunningProcedurePollingCaller\u003cArgs extends unknown[], Result\u003e\nimplements ILongRunningProcedureCaller\u003cArgs, Result\u003e {\n  constructor(\n    procedure: ILongRunningProcedure\u003cArgs, Result\u003e\n  , pollingInterval: number\n  )\n}\n```\n\n### Store\n```ts\nenum StoreItemState {\n  Pending\n, Resolved\n, Rejected\n}\n\ninterface Store\u003cResult, Error\u003e {\n  set(\n    id: string\n  , value:\n    | [StoreItemState.Pending]\n    | [StoreItemState.Resolved, Result]\n    | [StoreItemState.Rejected, Error]\n  , timeToLive?: number\n  ): Awaitable\u003cNullish\u003e\n\n  get(id: string): Awaitable\u003cNullable\u003c\n  | [StoreItemState.Pending]\n  | [StoreItemState.Resolved, Result]\n  | [StoreItemState.Rejected, Error]\n  \u003e\u003e\n\n  delete(id: string): Awaitable\u003cNullish\u003e\n}\n```\n\n#### MemoryStore\n```ts\nclass MemoryStore\u003cResult, Error\u003e implements Store\u003cResult, Error\u003e {}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdelight-rpc%2Flong-running-procedure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdelight-rpc%2Flong-running-procedure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdelight-rpc%2Flong-running-procedure/lists"}